直接插入排序

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))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值