博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
插入排序详述
阅读量:6000 次
发布时间:2019-06-20

本文共 2747 字,大约阅读时间需要 9 分钟。

hot3.png

插入排序

      在大多数情况下,插入排序算法时本章描述的基本的排序算噶中最好的一种,虽然插入排序算法仍然需要O(N2)的时间,但是在一般情况下,它要比冒泡排序快一倍,比选择排序还要快一点。尽管他比冒泡排序和选择排序算法都更麻烦一些,但他也并不很复杂,它经常被用在较复杂的排序算法的最后阶段,例如快速排序。

// insertSort.java	// demonstrates insertion sort	// to run this program: C>java InsertSortApp	//--------------------------------------------------------------	class ArrayIns	   {	   private long[] a;                 // ref to array a	   private int nElems;               // number of data items	//--------------------------------------------------------------	   public ArrayIns(int max)          // constructor	      {	      a = new long[max];                 // create the array	      nElems = 0;                        // no items yet	      }	//--------------------------------------------------------------	   public void insert(long value)    // put element into array	      {	      a[nElems] = value;             // insert it	      nElems++;                      // increment size	      }	//--------------------------------------------------------------	   public void display()             // displays array contents	      {	      for(int j=0; j
0 && a[in-1] >= temp) // until one is smaller, { a[in] = a[in-1]; // shift item to right --in; // go left one position } a[in] = temp; // insert marked item } // end for } // end insertionSort() //-------------------------------------------------------------- } // end class ArrayIns class InsertSortApp { public static void main(String[] args) { int maxSize = 100; // array size ArrayIns arr; // reference to array arr = new ArrayIns(maxSize); // create the array arr.insert(77); // insert 10 items arr.insert(99); arr.insert(44); arr.insert(55); arr.insert(22); arr.insert(88); arr.insert(11); arr.insert(00); arr.insert(66); arr.insert(33); arr.display(); // display items arr.insertionSort(); // insertion-sort them arr.display(); // display them again } // end main() } // end class InsertSortApp

插入排序的效率

       这个算法需要多少次比较和复制呢?在第一趟排序中,它最多比较一次,第二趟中最多比较两次,以此类推,最后一趟最多,比较N-1次,因此有1+2+3+4+...+N-1=N*(N-1)/2,然而,因为在每一趟排序发现插入点之前,平均只有全体数据项的一半真的进行了比较,我们除以2得到N*(N-1)/4,复制的次数大致等于比较的次数,然而一次复制与一次交换的时间耗费不同,所以相对于随机数据,这个算法比冒泡排序快一倍,比选择排序略快。在任意情况下,和其他排序一样,对于随机顺序的数据进行插入排序也需要O(N2)的时间级。对于已经有序或者基本有序的数据来说,插入排序要好的多,当数据有序的时候,while循环的条件总是假,所以变成了外层循环的一个简单语句,执行N-1次,这种情况下,算法运行值需要O(N)的时间,如果数据基本有序,插入排序几乎只需要O(N)的时间,这对把一个基本有序的文件进行排序是一个简单而有效的方法。然而对于逆序的数据,每次比较和移动都执行,所以插入排序不比冒泡排序快。

转载于:https://my.oschina.net/liddhome/blog/820678

你可能感兴趣的文章
centos 6.8安装java环境
查看>>
各种上传拿shell
查看>>
算法名称
查看>>
shell编写自动化安装dhcp服务
查看>>
Python(输入、输出;简单运算符;流程控制;转译)
查看>>
整数加减法练习
查看>>
javascript
查看>>
CF709B Checkpoints 模拟
查看>>
PHP简单计算器
查看>>
[self performselector: withObject: afterDelay:];一定时间后执行某个方法
查看>>
卡巴斯基手机安全软件:让遗失手机远离“短信门”
查看>>
“人大艺术学院”“赵雅芝中文网”等网站被挂马
查看>>
C#之解决 未处理的“System.InvalidOperationException”类型的异常出现在 System.dll中......
查看>>
C++类模版学习笔记
查看>>
【LabVIEW技巧】工厂模式_简单工厂
查看>>
页面的Tab选项卡 简单实例
查看>>
FTP传输协议的应用详解
查看>>
r语言ggplot2误差棒图快速指南
查看>>
python之处理异常
查看>>
c++中的虚函数
查看>>