内部排序算法
-
插入排序
基础插入排序指的是对于一个有序表,依次将待插入的值插入在有序表的合适位置,从而使得有序。在程序实现中可以先将表第一个值单独当成一个有序表,然后从第二个值开始往后循环,从后往前对比,直到找到合适位置插入,然后将目标位置原值及之后的值全部往后移动。这种排序方式的主要开销用于对比与后移操作。
1.1 插入排序优化
1. 折半插入排序:由于直接插入排序的开销用于对比与后移操作,针对于查找操作,可以采用折半对比的方法,减少对比次数。这种方式被称为折半插入排序。
2. 2-路插入排序:2路插入排序是对折半插入排序的再改进。这个优化主要针对于简化插入排序的移动操作。具体实现通俗来说就是初始将前两个值按大小分别当成最大的与最小的,然后放在表两端,如果比最大的还大就直接放在最大的后面,如果比最小的还小就直接放在最小的前面,这样就可以减少移动的次数。其他的操作跟普通插入排序一样,可以一定程度优化算法。
3. 希尔排序:希尔排序,又称缩小增量排序,也是一种插入排序,不同的是希尔排序是按照一定增量对比交换,然后缩小增量直到增量为1(这时进行普通插入排序操作)。我感觉希尔排序更像是插入排序和交换排序的结合。通过采用希尔排序可以不存在大量数据后移或者前移操作,而是通过一定区间数据的移动使得表逐渐有序。例如:
对于 10 个元素的数据,使其有序,可以先设增量为 5 ,使 1 6, 2 7 , 3 8, 4 9, 5 10进行插入排序,然后设增量为 3, 使 1 4 7 10, 2 5 8,