> 文章列表 > 插入排序详解

插入排序详解

插入排序详解

如有错误,感谢不吝赐教、交流

文章目录

  • 算法原理
  • 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两数、三数、四数之和