初级排序算法python版
选择排序:假设首项最小,和后边n-1项对比找出最小的,交换。。。
假设第i项是第i小的,和后边n-i项对比找出第i小的,交换,直至全部有序。
1 import random 2 3 def select_sort(list): 4 if len(list) != 0 or 1: 5 for i in range(len(list)-1): 6 min = i 7 for j in range(i+1, len(list)): 8 if list[min] > list[j]: 9 #list[min], list[j] = list[j], list[min] 10 min = j 11 list[min], list[i] = list[i], list[min] 12 13 if __name__ == '__main__': 14 list1 = [2, 3, 5, 7, 8, 9, 6, 54, 1, 42] 15 random.shuffle(list1) 16 print(list1) 17 select_sort(list1) 18 print(list1)
冒泡排序:从第n项开始与前一项对比,小的放在前,大的在后,依次比较交换,最小的将出现在第一项,从最后开始重复,直至全部有序。
1 def bubble_sort(list): 2 if list != None: 3 if len(list) != 1: 4 for i in range(len(list)): 5 for j in range(len(list)-1-i): 6 if list[j] > list[j+1]: 7 list[j], list[j+1] = list[j+1], list[j] 8 9 if __name__ == '__main__': 10 list1 = [223, 12, 344, 46, 678] 11 bubble_sort(list1) 12 print(list1)
插入排序:假设前i项从小到大有序,拿 i+1向前比较,小则向前交换,找到i+1合适的位置,依次对i+2等进行同样操作,直至末项。
1 import random 2 3 def insert_sort(list): 4 if len(list) != 0 or 1: 5 for i in range(1, len(list)): 6 j = i 7 while j >= 1 and list[j] < list[j-1]: 8 list[j], list[j-1] = list[j-1], list[j] 9 j -= 1 10 11 if __name__ == '__main__': 12 list1 = [5, 42, 9, 2, 1, 7, 8, 54, 3, 6] 13 random.shuffle(list1) 14 print(list1) 15 insert_sort(list1) 16 print(list1)
希尔排序:假设h有序数组的前i项从小到大有序,拿 i+h向前比较,小则向前交换,找到i+h合适的位置,依次对i+2h等进行同样操作,直至末项。把整个数组重新分为h//2的有序数组,重复,直至h//2n为1,这时相当于插入排序。
1 import random 2 3 def shell_sort(list): 4 step = len(list) // 2 5 while step > 0: 6 for i in range(step, len(list)): 7 while i >= step and list[i-step] > list[i]: 8 list[i-step], list[i] = list[i], list[i-step] 9 i -= step 10 step //= 2 11 12 if __name__ == '__main__': 13 list1 = [2, 3, 5, 7, 8, 9, 6, 54, 1, 42, 34, 23, 78] 14 random.shuffle(list1) 15 print(list1) 16 shell_sort(list1) 17 print(list1)
新手学习