Java가 정렬에 직접 삽입하는 세 가지 실현

1929 단어 java정렬
정렬(Insertion Sort)을 직접 삽입하는 기본적인 사상은 정렬할 기록을 키워드 크기에 따라 앞에 정렬된 서열의 적당한 위치에 삽입하는 것이다. 모든 기록을 삽입할 때까지.
설정된 수조는 a[0...n-1]이다.
1. 처음에 a[0]는 1개의 질서 구역을 만들었고 무질서 구역은 a[1.n-1]이다.령i=1
2. a[i]를 현재의 질서 구역 a[0...i-1]에 병합하여 a[0...i]의 질서 구간을 형성한다.
3. i++ 및 i==n-1까지 두 번째 단계를 반복합니다.정렬이 완료되었습니다.
다음은 정의에 따라 엄격하게 작성된 코드(작은 것부터 큰 것까지)를 보여 줍니다.

void Insertsort1(int a[], int n) 
{ 
 int i, j, k; 
 for (i = 1; i < n; i++) 
 { 
  // a[i] a[0...i-1]  
  for (j = i - 1; j >= 0; j--) 
   if (a[j] < a[i]) 
    break; 
  //  
  if (j != i - 1) 
  { 
   // a[i]  
   int temp = a[i]; 
   for (k = i - 1; k > j; k--) 
    a[k + 1] = a[k]; 
   // a[i]  
   a[k + 1] = temp; 
  } 
 } 
} 
이런 코드는 너무 길어서 명확하지 않다.이제 개작을 진행하여 검색과 데이터를 이동한 후 이 두 단계를 통합합니다.즉, 매번 a[i]가 먼저 앞의 데이터 a[i-1]과 비교한다. 만약에 a[i]>a[i-1]가 a[0...i]도 질서가 있고 조정할 필요가 없다는 것을 설명한다.그렇지 않으면 j=i-1,temp=a[i].그리고 데이터 a[j]를 뒤로 이동하면서 앞으로 검색합니다. 데이터 a[j] void Insertsort2(int a[], int n) { int i, j; for (i = 1; i < n; i++) if (a[i] < a[i - 1]) { int temp = a[i]; for (j = i - 1; j >= 0 && a[j] > temp; j--) a[j + 1] = a[j]; a[j + 1] = temp; } } 다시 a[j]를 앞의 a[0...j-1]에 삽입하는 질서정연한 구간에 사용하는 방법을 개작하고 데이터 교환으로 데이터를 대체한 후 이동합니다.만약에 a[j]의 이전 데이터 a[j-1]>a[j]가 있으면 a[j]와 a[j-1]를 교환하고 a[j-1]<=a[j]까지 교환한다.이렇게 하면 새로운 데이터를 질서정연한 구간에 새로 병합할 수 있다.

void Insertsort3(int a[], int n) 
{ 
 int i, j; 
 for (i = 1; i < n; i++) 
  for (j = i - 1; j >= 0 && a[j] > a[j + 1]; j--) 
   Swap(a[j], a[j + 1]); 
}
이상은 본문의 전체 내용입니다. 본고의 내용이 여러분의 학습이나 업무에 일정한 도움을 줄 수 있는 동시에 저희를 많이 지지해 주시기 바랍니다!

좋은 웹페이지 즐겨찾기