python 版
'''
简单思想
1、在一个无序序列中,取出第一个元素和有序序列最后一个元素对比
若大于,则下一轮循环
若小于,二者交换
2、重复第一步,直至序列全部有序
伴随着大量的比较和移动 \
顺序法
原始数据越有序,排序越快
算法复杂度 O(n^2)
优化方向 \
减少比较->折半插入排序 二分法
减少比较和移动 -> 希尔排序 ?如何选择一个合适的d,未解决 缩小增量
直接插入算法总结\
一开始总是想利用一层while算,利用i和j错位标记,后来引入k也不好实现
第一个元素总是不参与排序,然后换了另一种思绪
再加一层while时,没有把握好退出是j的数值,在内循环结束的时候,直接弹出赋值,结果总是出现元素多处赋值
debug时发现j退出条件是-1,即是是第一种情况,j指向也不空位,而是有序序列中的元素,j+1才是相对空位
个人总结:编写时,应该理清楚断点处,而且要明白每一个指针的位置,\
应该优化自己的思路,而不是大概,思路应该是全面的,而不是只是简单的判断
'''
from numpy import random
def insertionSort(nums):
length = len(nums) - 1
i = 0
while(i < length):
j = i
temp = nums[i + 1]
while(j>=0):
if temp >= nums[j]:
break
if temp < nums[j]:
nums[j+1] = nums[j]
j = j - 1
nums[j+1] = temp
i = i + 1
return nums
for i in range(5):
nums = random.randint(100, size=(5))
print(nums)
print(insertionSort(nums))