삽입 정렬 소개:
저는 대부분의 사람들이 포커를 했다고 믿습니다. 많은 사람들이 카드를 받았을 때 카드를 손에 들고 카드를 순서대로 놓는 것을 좋아합니다. 빈 왼손으로 시작하고 카드가 테이블 위에 있습니다. 그런 다음 테이블에서 한 번에 한 장씩 카드를 가져와 왼손의 제자리에 삽입합니다. 카드의 올바른 위치를 찾기 위해 이미 손에 있는 모든 카드와 오른쪽에서 왼쪽으로 비교합니다.
Java 관련 추천 무료 동영상 튜토리얼: java 무료 동영상 튜토리얼
의사 코드:
INSERTION-SORT(A) //A是数组 for j = 2 to A.length key = A[j] //(将A[j]插入排序序列A[1..j-1]) i = j - 1 while i > 0 and A[i] > key A[i+1] = A[i] i = i - 1 A[i+1] = key
java 코드:
//升序排序 public void InsertSortAscending(int[] A){ for(int j = 1;j < A.length;j++){ int key = A[j]; //将A[j]插入排序序列A[1..j-1] int i = j - 1; while(i >= 0 && A[i] > key){ A[j+1] = A[i]; i = i - 1; } A[i+1] = key; } }
삽입 정렬의 실행 단계를 살펴보겠습니다
배열 A[ 사용 2, 4,7,1,3,6]을 예로 들어보겠습니다
각 for 루프에서 노란색 직사각형은 A[j]의 값이고, 7행의 while 루프에서는 파란색 직사각형과 결합됩니다. 왼쪽의 사각형 값이 비교됩니다. 파란색 화살표는 8행에서 배열이 오른쪽으로 한 위치 이동했음을 나타내고, 노란색 화살표는 11행에서 키워드가 이동한 위치를 나타냅니다.
첫 번째 루프: 아래 그림에 표시된 대로:
두 번째 루프: 아래 그림에 표시된 대로:
참고: 여기서 A[2]는 A[1]보다 큽니다. 왜냐하면 A가 [1 ]은 확실히 A[0]보다 크므로 A[2]와 A[1]의 크기를 비교할 필요가 없습니다. 조건이 충족되지 않아 while 루프가 종료됩니다.
세 번째 주기: 아래 그림과 같이:
네 번째 주기: 아래 그림과 같이:
다섯 번째 주기: 아래 그림과 같이:
A 배열 이때 그림과 같이
6번째 루프에서 j는 6으로 루프 j 추천 Java 관련 기사 및 튜토리얼: java 입문 프로그램
위 내용은 Java 코드와 의사 코드를 사용하여 삽입 정렬 구현의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!