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常用排序算法之插入排序

直接插入排序法的思想是,把待排序的元素分成两部分,一部分是没排好序的元素,另一部分是排好序的元素。把没排好序的元素,逐一的插入已排好序的部分。 下面是使用直接插入排序法实现升序排序的步骤: 1.从...
  • tailleurchin
  • tailleurchin
  • 2016年10月10日 21:45
  • 134

Java常用排序算法(一):插入排序

1. 直接插入排序 基本思路: 在要排序的一组数中,假设前面(n-1)[n>=2]个数已经是排好顺序的,        现在要把第n个数插到前面的有序数中,使得这 n个数也是排好顺序的。       ...
  • Leo_eight
  • Leo_eight
  • 2016年03月20日 00:09
  • 371

C++简单排序算法之插入排序

直接插入排序是一种简单的插入排序法,其基本思想是:把待排序的纪录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的纪录插入完为止,得到一个新的有序序列。[1] 例如,已知待排序的一...
  • zhengjuexi4456
  • zhengjuexi4456
  • 2016年09月08日 23:50
  • 648

几种基本的排序算法:选择排序、插入排序、冒泡排序

选择排序(Selection sort)、插入排序(Insertion sort)与冒泡排序(Bubble sort)這三个排序方式是初学排序所必须知道的三个基本排序方式,它们由于速度不快而不实用(时...
  • wuxianglong
  • wuxianglong
  • 2011年10月13日 11:59
  • 7559

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

工具类为:package com.xu.util; /** * 算法排序工具类 * @author Mr.xuyaohui * */public class SortUtil { pu...
  • u014271612
  • u014271612
  • 2015年11月21日 21:13
  • 278

算法导论的python实现之插入排序

在排序中,可能大家最先接触也最容易想到的应该是冒泡排序或者选择排序,然而在算法导论一书中却是从插入排序开始讨论,其实现思路类似于整理纸牌的过程。从一堆牌中选择第一张拿在手中,然后每拿一张牌均在手中找到...
  • u014775342
  • u014775342
  • 2015年11月30日 10:40
  • 583

【Java常用排序算法】插入排序(直接插入排序、希尔排序)

插入排序 直接插入排序 希尔排序
  • donggua3694857
  • donggua3694857
  • 2017年02月25日 23:42
  • 687

排序算法系列:插入排序算法

直接插入排序(Straight Insertion Sort)的基本操作是将一个记录插入到已经排好序的有序表中,从而得到一个新的、记录数增1的有序表。...
  • u013761665
  • u013761665
  • 2016年03月24日 08:53
  • 6773

舞动的排序算法

在计算机中,排序算法有很多,包括插入排序,堆排序,归并排序,选择排序,计数排序,基数排序,桶排序,快速排序等。插入排序,堆排序,选择排序,归并排序和快速排序都是比较排序,它们通过对数组中的元素进行比较...
  • gaokao2011
  • gaokao2011
  • 2014年02月27日 09:21
  • 956

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

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

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