先来看看8种排序之间的关系:

直接插入排序,希尔排序_i++

 

1,  直接插入排序

   (1)基本思想:在要排序的一组数中,假设前面(n-1) [n>=2] 个数已经是排

好顺序的,现在要把第n个数插到前面的有序数中,使得这n个数

也是排好顺序的。如此反复循环,直到全部排好顺序。

(2)实例

直接插入排序,希尔排序_java实现_02

(3)用java实现



[plain]  view plain  copy

 



    1.    package com.njue;  
    2.   
    3.    
    4.   
    5. publicclass insertSort {  
    6.   
    7. public insertSort(){  
    8.   
    9.      int a[]={49,38,65,97,76,13,27,49,78,34,12,64,5,4,62,99,98,54,56,17,18,23,34,15,35,25,53,51};  
    10.   
    11.     int temp=0;  
    12.   
    13.     for(int i=1;i<a.length;i++){  
    14.   
    15.        int j=i-1;  
    16.   
    17.        temp=a[i];  
    18.   
    19.        for(;j>=0&&temp<a[j];j--){  
    20.   
    21.        a[j+1]=a[j];                       //将大于temp的值整体后移一个单位  
    22.   
    23.        }  
    24.   
    25.        a[j+1]=temp;  
    26.   
    27.     }  
    28.   
    29.     for(int i=0;i<a.length;i++)  
    30.   
    31.        System.out.println(a[i]);  
    32.   
    33. }  
    34.   
    35. }


     

    2,  希尔排序(最小增量排序)

    (1)基本思想:算法先将要排序的一组数按某个增量d(n/2,n为要排序数的个数)分成若干组,每组中记录的下标相差d.对每组中全部元素进行直接插入排序,然后再用一个较小的增量(d/2)对它进行分组,在每组中再进行直接插入排序。当增量减到1时,进行直接插入排序后,排序完成。

    (2)实例:

    直接插入排序,希尔排序_数据结构与算法_03

     

    (3)用java实现

     



    [plain]  view plain  copy

     



    1. publicclass shellSort {  
    2.   
    3. publicshellSort(){  
    4.   
    5.     int a[]={1,54,6,3,78,34,12,45,56,100};  
    6.   
    7.     double d1=a.length;  
    8.   
    9.     int temp=0;  
    10.   
    11.     while(true){  
    12.   
    13.        d1= Math.ceil(d1/2);  
    14.   
    15.        int d=(int) d1;  
    16.   
    17.        for(int x=0;x<d;x++){  
    18.   
    19.            for(int i=x+d;i<a.length;i+=d){  
    20.   
    21.               int j=i-d;  
    22.   
    23.               temp=a[i];  
    24.   
    25.               for(;j>=0&&temp<a[j];j-=d){  
    26.   
    27.               a[j+d]=a[j];  
    28.   
    29.               }  
    30.   
    31.               a[j+d]=temp;  
    32.   
    33.            }  
    34.   
    35.        }  
    36.   
    37.        if(d==1)  
    38.   
    39.            break;  
    40.   
    41.     }  
    42.   
    43.     for(int i=0;i<a.length;i++)  
    44.   
    45.        System.out.println(a[i]);  
    46.   
    47. }  
    48.   
    49. }