前言:
眼前大家对“c语言直接插入排序”大致比较着重,朋友们都想要了解一些“c语言直接插入排序”的相关知识。那么小编同时在网上网罗了一些对于“c语言直接插入排序””的相关文章,希望各位老铁们能喜欢,我们一起来了解一下吧!上次我们讨论了选择排序,这次我们来介绍一下插入排序。其核心原理是随机给定一个列表中的n个数字, 将该列表分为两部分。第一部分为已排序列表, 第二部分为未排序列表。最开始的时候已排序列表只有原列表的第1个元素, 原列表剩余的n-1个元素纳入未排序列表。排序执行n-1轮步骤如下:
第1轮: 从未排序列表的最末端获取一个元素a, 将该元素a与已排序列表的最后一个元素b进行比较。 如a>=b则将a插入b的后面, 结束排序; 如a<b, 则将a插入b的前面, 结束本轮排序。
第2轮: 从未排序列表的最末端获取一个元素a, 将该元素a与已排序列表的最后一个元素b进行比较。 如b<a则将a插入b的后面, 结束排序; 如b>a, 则继续将a与b之前的c进行比较; 如c<a则将a插入b之前c之后, 结束排序; 如c>a, 则将a插入c的前面, 结束本轮排序。
......
第n-1轮: 从未排序列表的最左侧获取一个元素, 将该元素与已排序列表从右向左所有的元素逐一比较,直到找到自己的位置并插入后, 结束本轮排序。
排序结束。
以下为实现的代码:
# coding: utf-8# import randomdef my_insert(my_list=[]): my_list1 = my_list[0:1] # 已排序列表 my_list2 = my_list[1:] # 未排序列表 while my_list2: value = my_list2.pop() index = len(my_list1) - 1 for i in list(range(len(my_list1)))[::-1]: if value < my_list1[i]: index = i else: if value > my_list1[-1]: my_list1.append(value) else: my_list1.insert(index, value) break else: my_list1.insert(index, value) return my_list1if __name__ == "__main__": # elements_list = [random.randint(1, 100) for i in range(10)] elements_list = [71, 47, 4, 32, 77, 99, 56, 14, 7, 54] print("排序之前: ", elements_list) elements_list = my_insert(elements_list) print("排序之后: ", elements_list)
不足之处请批评指正,欢迎讨论~~~
标签: #c语言直接插入排序