Java 정렬 알고리즘 요약 삽입 정렬

이 예제에서는 Java 삽입 정렬 방법을 설명합니다.여러분에게 참고할 수 있도록 나누어 드리겠습니다.구체적인 분석은 다음과 같다.
이미 질서정연한 데이터 시퀀스가 있습니다. 이 배열된 데이터 시퀀스에 하나의 수를 삽입해야 하지만, 삽입된 데이터 시퀀스는 여전히 질서정연합니다. 이때 삽입 정렬법을 사용해야 합니다.본고는 주로 정렬을 삽입한java의 실현을 소개한다.
 
정렬을 삽입하는 기본적인 작업은 하나의 데이터를 이미 정렬된 질서 있는 데이터에 삽입하여 새로운, 개수에 하나를 더한 질서 있는 데이터를 얻는 것이다.비교와 교환의 시간 복잡도는 O(n^2)이고 알고리즘은 스스로 적응하며 데이터가 기본적으로 질서정연한 상황에 대해 시간 복잡도는 O(n)이며 알고리즘이 안정적이고 비용이 적다.알고리즘은 데이터가 이미 기본적으로 질서정연하거나 데이터 양이 적은 상황에 적합하다.
삽입 알고리즘은 정렬할 그룹을 두 부분으로 나눈다. 첫 번째 부분은 이 그룹의 모든 요소를 포함하지만, 마지막 원소를 제외하고, 두 번째 부분은 이 원소만 포함한다.첫 번째 부분을 정렬한 후에 이 마지막 요소를 현재 질서정연한 첫 번째 부분에 삽입합니다.
알고리즘 설명
일반적으로 삽입 정렬은 in-place를 사용하여 수조에서 이루어진다.구체적인 알고리즘은 다음과 같습니다.
1. 첫 번째 원소부터 이 원소는 이미 정렬되었다고 생각할 수 있다
2. 다음 요소를 추출하여 정렬된 요소 시퀀스에서 뒤로 스캔
3. 요소(정렬됨)가 새 요소보다 크면 다음 위치로 이동합니다.
4. 정렬된 요소가 새 요소보다 작거나 같은 위치를 찾을 때까지 3단계를 반복합니다.
5. 새 요소를 다음 위치에 삽입
6. 2단계 반복
만약 비교 조작의 대가가 교환 조작보다 크다면 이분 검색법으로 비교 조작의 수를 줄일 수 있다.이 알고리즘은 정렬을 삽입하는 변종으로 2분 찾기 정렬이라고 할 수 있다.
코드 구현

public void insertionSort() { 
  //   
  int out, in; 
  int count1 = 0, count2 = 0;//  ,  
  for (out = 1; out < nElems; out++) { 
   long temp = a[out]; 
   in = out; 
   boolean flag=in>0&&a[in-1]>=temp; 
   while(flag){ 
   if(a[in-1]>=temp){ 
    if(in>0){ 
    a[in]=a[in-1]; 
    count1++; 
    --in;  
    } 
   } 
    count2++; 
    flag=in>0&&a[in-1]>=temp; 
   }  
   a[in] = temp; 
  } 
  System.out.println(" :" + count1 + "  :" + count2); 
}
삽입 정렬법은 데이터가 이미 일정한 순서가 있는 상황에서 효율이 비교적 좋다.그러나 데이터가 규칙적이지 않으면 대량의 데이터를 이동해야 하기 때문에 그 효율은 거품 정렬법과 선택 정렬법처럼 떨어진다.
본고에서 기술한 것이 여러분의 자바 프로그램 설계에 도움이 되기를 바랍니다.

좋은 웹페이지 즐겨찾기