一、几种排序的比较:
二、排序的代码实现
1、冒泡排序
给定一组随机数字的数列,将它们按照从小到大的顺序重新排列好。就像冒泡一样,小的数不断地向上漂浮,直到没有为止。
排序基本思路:循环这个数列,将循环到的数字n1与下一个数字n2作出对比,如果n2>n1,那么将两个值换位,如此下去当第一次循环结束时,最小的数已经在最前面,重复这样的循环就会将这组数按从小到大的顺序排列好。
li = [11,432,5,4576,234,3,324,5,876,456,235432,56] for m in range(len(li)-1): for n in range(m+1, len(li)): if li[m] > li[n]: tmp = li[m] li[m] = li[n] li[n] = tmp print li
测试排列5万个小于2000的随机数字,结果发现用时为:118秒
2、插入排序(Insertion Sort)
排序基本思路:插入排序简单的理解为 从一组数据的第二个值n开始循环,通过n与前面数值对比大小,将n插入到前面合适的位置。通过不断地向后循环对比大小,那么前面一部分的数据始终是已经排序好的数组。这样全部循环下来,就得到了一个从小到大排列OK的数组。
[77, 92, 67, 8, 6, 84, 55, 85, 43, 67]
[67, 77, 92, 8, 6, 84, 55, 85, 43, 67]
[8, 67, 77, 92, 6, 84, 55, 85, 43, 67]
[6, 8, 67, 77, 92, 84, 55, 85, 43, 67]
[6, 8, 67, 77, 84, 92, 55, 85, 43, 67]
[6, 8, 55, 67, 77, 84, 92, 85, 43, 67]
[6, 8, 55, 67, 77, 84, 85, 92, 43, 67]
[6, 8, 43, 55, 67, 77, 84, 85, 92, 67]
[6, 8, 43, 55, 67, 67, 77, 84, 85, 92]
# _*_coding:utf:8_*_ import random import time def sort_meth(source): for i in range(1, len(source)): currant_val = source[i] # 获取当前循环列表中的值 position = i # 获取当前循环的次数 while position > 0 and source[position-1] > currant_val: # 当左边的数大于大循环中的数时 source[position] = source[position-1] # 将小循环此刻的数赋值等于左边较大的值 position -= 1 source[position] = currant_val # 最终小循环结束时,就是大循环的数应该插入的位置 if __name__ == ‘__main__‘: #array = [871,100,160,755,614,621,403,671,256,915,174,906] array = [] for i in range(50000): array.append(random.randrange(2000)) time_start = time.time() sort_meth(array) time_end = time.time() ret = time_end-time_start print(ret)
插入排序
测试排列5万个小于2000的随机数字,结果发现用时为:115秒
3、快速排序(quick sort)
时间: 2024-12-11 14:26:36