插入排序详解
如有错误,感谢不吝赐教、交流
文章目录
- 算法原理
- python代码实现
- Java实现
- 总结
算法原理
对未排序的数据,在已排序序列中从后向前扫描,找到相应位置插入。
给要插入的元素腾位置,需要将插入位置之后的已排序元素向后移动一位。
python代码实现
arr = [86, 39, 77, 23, 32, 45, 58, 63, 93, 4, 37, 22] # 待排序数组for i in range(len(arr) - 1):preIndex = i # 已排序的索引print("第{}次".format(i))while preIndex >= 0 and arr[i + 1] < arr[preIndex]:tmp = arr[i + 1]arr[i + 1] = arr[preIndex]arr[preIndex] = tmpi = i - 1preIndex = preIndex - 1print(arr)
执行结果:
第0次
[39, 86, 77, 23, 32, 45, 58, 63, 93, 4, 37, 22]
第1次
[39, 77, 86, 23, 32, 45, 58, 63, 93, 4, 37, 22]
第2次
[23, 39, 77, 86, 32, 45, 58, 63, 93, 4, 37, 22]
第3次
[23, 32, 39, 77, 86, 45, 58, 63, 93, 4, 37, 22]
第4次
[23, 32, 39, 45, 77, 86, 58, 63, 93, 4, 37, 22]
第5次
[23, 32, 39, 45, 58, 77, 86, 63, 93, 4, 37, 22]
第6次
[23, 32, 39, 45, 58, 63, 77, 86, 93, 4, 37, 22]
第7次
[23, 32, 39, 45, 58, 63, 77, 86, 93, 4, 37, 22]
第8次
[4, 23, 32, 39, 45, 58, 63, 77, 86, 93, 37, 22]
第9次
[4, 23, 32, 37, 39, 45, 58, 63, 77, 86, 93, 22]
第10次
[4, 22, 23, 32, 37, 39, 45, 58, 63, 77, 86, 93]
Java实现
public static void insertSort(int [] arr) {int length = arr.length;for (int j = 1; j < length; j++) {int key = arr[j];int i = j - 1;// 从小到大排序while (i >= 0 && arr[i] > key) {arr[i+1] = arr[i];i = i - 1;}arr[i + 1] = key;}}
总结
每一轮会确定一个元素的最终位置,时间复杂度为O(n^2)
ps:计划每日更新一篇博客,今天由于内容原因会分几篇文章更新,今日2023-04-23,日更第七天,昨日更新:leetcode两数、三数、四数之和