冒泡排序
比较相邻的元素大小,将小的前移,大的后移,就像水中的气泡一样,最小的元素经过几次移动,会最终浮到水面上。
def bubble_sort(list): if list != 0: if len(list) == 1: pass else: for i in range(len(list)): is_swap = 0 for j in range(len(list)-i-1): if list[j] > list[j+1]: # 交换j,j+1位置上的数字 is_swap = 1 list[j],list[j+1]=list[j+1],list[j] if not is_swap: return
插入排序
将一个待排数据按其大小插入到已经排序的数据中的适当位置,直到全部插入完毕。
def insert_sort(list): if list != 0: if len(list) == 1: pass else: for i in range(1,len(list)): j = i-1 while(j>=0): if list[j] > list[j+1]: # 交换j,j+1位置上的数字 list[j],list[j+1]=list[j+1],list[j] j-=1
快速排序
通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,最终达到整个数据变成有序序列。
def quick_sort(a,start,end): #print(start, end) if start >= end: return pivot = a[start] #print(pivot) low = start high = end while start < end: while start < end and a[end] >= pivot: end -= 1 a[start] = a[end] while start < end and a[start] <= pivot: start += 1 a[end] = a[start] a[end] = pivot #print(a) quick_sort(a, low, start - 1) quick_sort(a, end + 1, high)
测试程序:针对不同算法设计测试程序,单次程序执行时间不是固定的。
if __name__ == '__main__': list1 = [10, 9, 8, 7, 6, 5, 4, 3, 2, 1] print("原始数据:") print(list1) start = time.clock() start1 = datetime.datetime.now() bubble_sort(list1) end1 = datetime.datetime.now() end = time.clock() print("排序后的数据:") print(list1) print('冒泡排序耗时: %s 秒'%(end - start)) print('冒泡排序耗时:') print(end1-start1) list1 = [10, 9, 8, 7, 6, 5, 4, 3, 2, 1] print("\n原始数据:") print(list1) start = datetime.datetime.now() insert_sort(list1) end = datetime.datetime.now() print("排序后的数据:") print(list1) print("插入排序耗时:") print(end - start) list1 = [10, 9, 8, 7, 6, 5, 4, 3, 2, 1] print("\n原始数据:") print(list1) start = time.clock() quick_sort(list1, 0, len(list1)-1) end = time.clock() print("排序后的数据:") print(list1) print('快速排序耗时: %s 秒' % (end - start))