Crazy Snail

万头攒动火树银花之处不必找我。如欲相见,我在各种悲喜交集处,能做的只是长途跋涉的归真返璞。...

Java常用排序算法之插入排序

插入排序(Insertion Sort):通过对未排序的数据逐个插入至已排好的数据中的合适位置。
步骤:
首先对数组的前两个数据进行从小到大排序
将第三个数据先与第二个数据比较,大就排在第三个,小就与第一个数据比,同时原第二个数据索引往后移一个;如果比第一个大就其放在第二位,比第一个小就继续往前移放在第一位,同时原第一个数据索引往后移一个。
将第四个数据按照上述规则插入到前面排好的三个数之间。
。。。
最终得到一个递增数组。
java实现代码:

public class InsertionSort {
    static final int SIZE=10;
    public static void main(String[] args) {
        int arr[]=new int[SIZE];
        for(int i=0;i<arr.length;i++){
            arr[i]=(int)(Math.random()*100);
        }
        System.out.println("排序前的数组:");
        for(int i=0;i<arr.length;i++){
            System.out.print(arr[i]+" ");
        }
        System.out.println();
        insertionSort(arr);
        System.out.println("插入排序后的数组:");
        for(int i=0;i<arr.length;i++){
            System.out.print(arr[i]+" ");
        }
        System.out.println();
    }
    private static void insertionSort(int[] arr) {
        int i,j,x;
        for(i=1;i<arr.length;i++){
            x=arr[i];//待排数据arr[i]
            j=i-1;//待排数据前一个数据arr[j]
            while(j>=0&&x<arr[j]){
                arr[j+1]=arr[j];
                j--;
            }//如果待排数据比前一个数据小,就将前一个数据后移一位,再让待排数据与更前一位数据比较
            arr[j+1]=x;//将待排数据放到合适位置
            System.out.print("第"+i+"步排序后结果为:");
            for(int y=0;y<arr.length;y++){
                System.out.print(arr[y]+" ");
            }
            System.out.println();
        }
    }

输出为:

排序前的数组:
72 16 41 24 20 19 31 2 16 22 
第1步排序后结果为:16 72 41 24 20 19 31 2 16 22 
第2步排序后结果为:16 41 72 24 20 19 31 2 16 22 
第3步排序后结果为:16 24 41 72 20 19 31 2 16 22 
第4步排序后结果为:16 20 24 41 72 19 31 2 16 22 
第5步排序后结果为:16 19 20 24 41 72 31 2 16 22 
第6步排序后结果为:16 19 20 24 31 41 72 2 16 22 
第7步排序后结果为:2 16 19 20 24 31 41 72 16 22 
第8步排序后结果为:2 16 16 19 20 24 31 41 72 22 
第9步排序后结果为:2 16 16 19 20 22 24 31 41 72 
插入排序后的数组:
2 16 16 19 20 22 24 31 41 72 

第一步用待排数据arr[1]=16与arr[0]=72比较,arr[1]<arr[0],所以,72的索引后移一位至1,数据16的索引变成0。即{16,72};
第二步用待排数据arr[2]=41先与arr[1]=72比较,arr[2] < arr[1],所以72的索引后移一位至2,即arr[2]=72;继续比较待排数据41和arr[0]=16,41>=arr[0],所以16的索引0保持不变并且数据41的索引变成1。即{16,41,72}
第三步….
第n步,用arr[n]与arr[n-1]比较,按照上述规则交换后继续与arr[n-2]比较,arr[n-3],…直至其前面的数比其小则停止比较,确定待排数据索引。
注意:待排数据的索引是在与前面的数据比较完毕后才确定的,这一点从代码中可以看到arr[j+1]=x;在此之前待排数据X在比较过程中没有赋值给其他索引。

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/java_zero2one/article/details/51560339
文章标签: java 插入排序 算法
个人分类: 数据结构与算法
想对作者说点什么? 我来说一句

Java常用排序算法

2009年06月25日 10KB 下载

Java常用排序算法源码

2016年09月07日 26KB 下载

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭