前言:排序是现在程序员的必备技能,是很多公司的面试必考点,不管是做移动端,后端开发,排序是绕不过的,众生平等。学习其排序的思想往往能解决不同类型的问题,所以静下心来,研究一下不同的排序算法,算是对自己有一个提升。
排序概述:排序就是将一组对象按照某种逻辑顺序重新排列的过程。
十大排序算法:冒泡排序,选择排序,插入排序,归并排序,堆排序,快速排序,希尔排序,计数排序,基数排序,桶排序。
本文对简单插入排序走一个解析:
简单插入排序步骤:
1.对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入
2.为了给要插入的元素腾出空间,我们需要将插入位置之后的已排序元素再都向后移动一位
注:插入排序所需要的时间取决于输入中元素的初始顺序,例如,对于一个很大且其中的元素已经有序或者接近有序的数组进行排序将会比对随机顺序的数组或是逆序数组进行排序要快得多。总的来说,插入排序对于部分有序的数组十分高效,也很适合小规模数组。
代码举例:
对一个数组进行排序:(86,11,77,23,32,45,58,63,93,4,37,22)
int[] array = {86,11,77,23,32,45,58,63,93,4,37,22};
排序代码展示:
调用sort方法后打印如下:
对该案例进行分析:
(1) 默认第0个位置上的是排号序的 preIndex = 0; 那么待排序的就是在preIndex + 1个位置上。currentValue = 11在while循环中判断待排序的11是小于86的且preIndex >=0 进入while循环,将11的这个位置变成86. preIndex--后小于0,循环结束。再对第0个位置赋值为11.这样就完成了一次排序。
排序结果:【11,86,77,23,32,45,58,63,93,4,37,22】
(2) preIndex = 1 开始 那么待排序的就是在preIndex + 1个位置上。currentValue = 77在while循环中判断待排序的77是小于86的且preIndex >=0 进入while循环,将77的这个位置上变成86,随后preIndex--。则preIndex = 0,判断77是大于11的,则跳出while循环。第1个位置上赋值为77,这样就完成了第二次排序。
排序结果:【11,77,86,23,32,45,58,63,93,4,37,22】
........循环直至结束
打印每个步骤的数组:
至此简单插入排序就到这里讲解结束了,细看的话其实一点也不复杂。