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

原创 2016年06月02日 01:35:25

插入排序(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在比较过程中没有赋值给其他索引。

版权声明:本文为博主原创文章,未经博主允许不得转载。

JAVA常用排序算法之直接插入排序

在JAVA开发的过程中,排序算法是不可获取的一种重要的算法。本文将首先讨论一下直接选择排序。 直接选择排序的思想是:将一组无序的数据一个一个的排序好,后一个数据插入已经有序排列的序列中。这样不断地循...

利用java实现数据结构中常用的插入排序和快速排序算法

源程序: Data.java package Sort; class Data {   Comparable key;   Object value;   public Data() { ...

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

一、直接插入排序package demosort; /* * 直接插入排序: * 基本思想:在要排序的一组数中,假设前面(n-1)[n>=2] 个数已经是排 * 好顺序的,现在要把第n个数插到前...
  • zoran_
  • zoran_
  • 2016年09月11日 13:39
  • 106

几种常用的排序算法的分析及java实现(希尔排序,堆排序,归并排序,快速排序,选择排序,插入排序,冒泡排序)

最近决定每天学点数据结构与算法,写博客来督促自己继续学习~ 以下的每个排序的写法格式基本按照先介绍基本思想,再描述具体过程,最后是具体代码。关于复杂度等问题后续更新。如有写的不严谨的地方,欢迎指...

【Java】八个常用的排序算法:插入排序、冒泡排序、选择排序、希尔排序 、快速排序、归并排序、堆排序和LST基数排序

这篇文章主要介绍了Java如何实现八个常用的排序算法:插入排序、冒泡排序、选择排序、希尔排序 、快速排序、归并排序、堆排序和LST基数排序,需要的朋友可以参考下 本文实现了八个常用的排序算法:插...
  • C_jian
  • C_jian
  • 2016年01月16日 13:54
  • 602

Java常用排序算法(快速排序/插入排序/shell排序)

工具类为:package com.xu.util; /** * 算法排序工具类 * @author Mr.xuyaohui * */public class SortUtil { pu...

几种常用的排序算法的分析及java实现(希尔排序,堆排序,归并排序,快速排序,选择排序,插入排序,冒泡排序)

最近决定每天学点数据结构与算法,写博客来督促自己继续学习~ 以下的每个排序的写法格式基本按照先介绍基本思想,再描述具体过程,最后是具体代码。关于复杂度等问题后续更新。如有写的不严谨的地方,欢迎指出,...

【学习总结】Java中最常用的三大排序算法-冒泡排序、选择排序、插入排序

冒泡排序、选择排序、插入排序
  • heccmm
  • heccmm
  • 2016年11月30日 12:54
  • 128

使用C#详解常用排序算法(二):插入排序(Insert Sort)

结合代码和运行输出详细讲解插入排序的排序过程
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java常用排序算法之插入排序
举报原因:
原因补充:

(最多只允许输入30个字)