数据结构和算法-排序算法(插入排序)

数据结构和算法-排序算法(插入排序)

插入排序第一种算法是简单插入排序。
package suanfa;

public class MySort {
    public void insertSort(int[] data){
        for(int i=1;i<data.length;i++){
            int base=data[i];
            int index=i-1;
            while(index>=0&&data[index]>base){
                data[index+1]=data[index];
                index--;
            }
            data[index+1]=base;
        }
    }
    public static void main(String[] args){
        int[] data=new int[]{9,8,7,65,4,3,32,223,1};
        MySort mySort=new MySort();
        mySort.insertSort(data);
        for(int value:data){
            System.out.println(value);
        }
    }
}

每次i增加1,然后增加后都要确保i及i之前的数组是有序的(将第i个元素找到合适的位置进行插入)。

插入排序的第二种算法是希尔排序,这个是插入排序的升级版,为啥有性能上的提升呢?

因为我们都知道在插入排序中越是整体有序的数组,插入排序的速度越快。而我们的希尔排序就是逐步将数组变得整体有序(希尔排序的最后一步,步长为1和插入排序相同)

package suanfa;

public class MySort {
    public void shellSort(int[] data){
        for(int i=data.length/2;i>0;i=i/2){
            for(int k=i;k<data.length;k++){
                int base=data[k];
                int index=k-i;
                while(index>=0&&data[index]>base){
                    data[index+i]=data[index];
                    index=index-i;
                }
                data[index+i]=base;
            }
        }
    }
    public static void main(String[] args){
        int[] data=new int[]{9,8,7,65,4,3,32,223,1};
        MySort mySort=new MySort();
        mySort.shellSort(data);
        for(int value:data){
            System.out.println(value);
        }
    }
}
posted on 2021-09-23 15:44  gyp666  阅读(66)  评论(0)    收藏  举报