>  기사  >  Java  >  자바 직접 삽입 정렬 예

자바 직접 삽입 정렬 예

高洛峰
高洛峰원래의
2016-12-29 15:57:081357검색

정렬 효율성에 영향을 미치는 요소는 일반적으로 데이터 비교 횟수, 데이터 이동 횟수, 메모리 점유 공간의 세 가지 측면에서 비교됩니다.
버블정렬, 선택정렬, 삽입정렬, 퀵정렬의 일반적인 비교를 해보겠습니다. 버블 정렬 알고리즘은 여러 정렬 알고리즘 중 비교 횟수와 이동 횟수가 가장 많기 때문에 일반적으로 사용되지 않습니다. 유일한 장점은 알고리즘이 간단하고 이해하기 쉬워서 데이터의 양이 적을 때 사용할 수 있다는 것입니다. 일부 응용 프로그램 값이 될 것입니다. 선택 정렬은 n제곱인 버블 정렬과 비교 횟수는 동일하지만 교환 횟수를 최소한으로 줄여 데이터의 양이 적고 데이터 교환이 비교보다 시간이 많이 걸리는 경우에 적용할 수 있습니다. 데이터를 선택하세요.
대부분의 경우 데이터의 양이 상대적으로 적거나 기본적으로 정렬된 경우 삽입 정렬 알고리즘이 최선의 선택입니다. 더 많은 양의 데이터를 정렬하려면 일반적으로 퀵 정렬이 가장 좋은 방법입니다.
위의 정렬 알고리즘은 메모리 공간을 거의 차지하지 않으며 교환 중에 데이터 항목을 임시로 저장하기 위한 추가 변수만 필요합니다. 따라서 차지하는 메모리 공간의 크기는 비교가 되지 않습니다.

삽입 정렬의 비교 횟수는 여전히 n제곱이지만 일반적으로 버블 정렬보다 두 배 빠르고 선택 정렬보다 약간 빠릅니다. 이는 퀵 정렬과 같은 복잡한 정렬 알고리즘의 마지막 단계에서 자주 사용됩니다.

알고리즘: i-1 처리 후 L[1..i-1]이 정렬되었습니다. i번째 처리 패스에서는 L[i]를 L[1..i-1]의 적절한 위치에 삽입하기만 하여
L[1..i]를 다시 정렬된 시퀀스로 만듭니다. 이 목표를 달성하기 위해 순차적 비교를 사용할 수 있습니다.
먼저 L[i]와 L[i-1]을 비교합니다. L[i-1] 그렇지 않으면 L[i]와 L[i-1]의 위치를 ​​교환하고 특정 위치 j가 될 때까지 L[i-1]과 L[i-2]를 계속 비교합니다. (1≤j≤i -1),
L[j] ≤ L[j+1]까지
장점: 이동 요소 수가 적고 보조 공간이 하나만 필요함
시간 복잡도 n*n
대기할 때 정렬된 레코드 개수 n이 적을 때 좋은 정렬 방법입니다. 하지만 n이 너무 크면 부적절합니다

예: int[] 값 ​​= { 5, 2, 4, 1, 3 }

정렬 과정:
1번째: 2 ,5,4,1,3
2번째: 2,4,5,1,3
3번째: 1,2,4,5,3
4번째 : 1,2 ,3,4,5


java 코드:

public class InsertSort {
   public static void main(String[] args) {
       int[] values = { 5, 2, 4, 1, 3 };
       sort(values);
       for (int i = 0; i < values.length; ++i) {
           System.out.println(values[i]);
       }
   }
   public static void sort(int[] values) {
       int temp;
       int j = 0;
       for (int i = 1; i < values.length; i++) {
           if(values[i]<values[i-1])//此处的判断很重要,这里体现了插入排序比冒泡排序和选择排序快的原因。
           {
               temp = values[i];
               //数据往后移动
               for (j=i-1; j>=0 && temp<values[j]; j--)
               {
                   values[j+1] =values[j];
               }
               //将数据插入到j+1位置
               values[j+1] =temp;
               System.out.print("第" + (i + 1) + "次:");
               for (int k = 0; k < values.length; k++) {
                   System.out.print(values[k]+",");
               }
               System.out.println("");
           }
       }
   }
}

두 번째 예

package cn.cqu.coce.xutao;
public class zhijiecharu {

 public static void main(String args[]){

 int a[]={1,2,34,67,8,9,6,7,56,34,232,99};
 int i,j,k;
 for(i=0;i<a.length;i++)
  System.out.print(a[i]+"\t");
 System.out.println();
 for(i=1;i<a.length;i++){

  for(j=i-1;j>=0;j--)
   if(a[i]>a[j])
    break;

  if(j!=i-1){
   int temp;
   temp=a[i];
   for(k=i-1;k>j;k--)
    a[k+1]=a[k];
   a[k+1]=temp;  
  }  
 }
 for(i=0;i<a.length;i++)
  System.out.print(a[i]+"\t");
 System.out.println();
  }
}

자바 직접 삽입 정렬 예


더 많은 Java 직접 삽입 정렬 예제 및 관련 기사를 보려면 PHP 중국어 웹사이트를 주목하세요!


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.