标签:temp 复杂 大小 移动 for循环 等于 直接插入排序 合并 性能分析
一、插入排序的基本思想
从初始有序的子集合开始,不断地把新的数据元素插入到已排列有序子集合的合适位置上,使子集合中数据元素的个数不断增多,当子集合等于集合时,插入排序算法结束。常用的 插入排序算法有直接插入排序和希尔排序两种。
二、直接插入排序
1.直接插入排序的定义
直接插入排序的基本思想是:顺序地把待排序的数据元素按其值的大小插入到已排序数据元素子集合的适当位置。子集合的数据元素个数从只有一个数据元素开始逐次增大。当子集合大小最终和集合大小相同时排序完毕。
2.直接插入排序的实现
public static void straightInsertionSort(int[] L) { int i, j, temp; for (i = 0; i < L.length - 1; i++) { temp = L[i+1]; // 保存要插入的数据元素 j = i; while (j > -1 && temp <= L[j]) { // 将temp插入到原数组集合中 L[j+1] = L[j]; j--; } L[j+1] = temp; } }
int[] array1 = {9,1,5,8,3,7,4,6,2};
初始时,子集合中L0已经排好序,即为{9}
i=0时,temp=L1=1,j=0,0大于-1且1小于9,则L1=9,j=-1,L0=1,即将1插入到9的前面,集合中{1,9}
i=1时,temp=L2=5,j=1,1大于-1且5小于9,则L2=9,j=0,0大于-1但5不小于1,则L1=5,集合中{1,5,9}
i=2时,temp=L3=8,即将8和9比较,8插入到9的前面,8和5比较,不动,8和1比较,也不动,集合中{1,5,8,9}
...
3.直接插入排序的性能分析
(1)时间复杂度为O(n2)
(2)空间复杂度为O(1)。
(3)是一种稳定的排序算法。
三、希尔排序
1.希尔排序的定义
希尔排序的基本思想是:把待排序的数据元素分成若干个小组,对同一小组内的数据元素用直接插入法排序;小组的个数逐次缩小;当完成了所有数据元素都在一个组内的排序后排序过程结束。希尔排序又称作缩小增量排序。
在直接插入排序算法的性能分析中可以得出结论:原始数据集合越接近有序,直接插入排序算法的时间效率越高,其时间效率在O(n)~O(n2)之间。这个结论是希尔排序算法能够成立的基础。希尔排序算法把待排序数据元素分成若干小组,在小组内用直接插入排序算法排序,当把若干个小组合并为一个小组时,组中的数据元素集合将会接近有序,这样各组内的直接插入排序算法的时间效率就很好,最终整个希尔排序的时间效率就很高。
数据结构(四十四)插入排序(1.直接插入排序 2.希尔排序)
标签:temp 复杂 大小 移动 for循环 等于 直接插入排序 合并 性能分析
原文地址:https://www.cnblogs.com/BigJunOba/p/9298172.html