初级排序算法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)

新手学习

posted @ 2017-08-27 21:43  imageSet  阅读(219)  评论(0编辑  收藏  举报