python 排序算法

冒泡排序: 

 1 #coding:utf-8
 2 '''
 3 比较相邻的元素,每一趟交换后,最后的元素是最大的。
 4 第一次比较n-1次,第二次比较n-2次。。。第n-1次比较1次
 5 进行n-1次冒泡次数
 6 最优时间复杂度O(n),最坏时间复杂度O(n^2)
 7 '''
 8 
 9 def bubble_sort(b_list):
10     n = len(b_list)
11     for j in range(0, n-1):
12         count = 0
13         for i in range(0, n-1-j):
14             if b_list[i] > b_list[i+1]:
15                 count += 1
16                 t = b_list[i+1]
17                 b_list[i+1] = b_list[i]
18                 b_list[i] = t
19         if count == 0:
20             break

 



简单选择排序

 1 #coding:utf-8
 2 '''
 3 找到最小的放到最前面,接着从剩余的继续找最小的,放到第二个。
 4 一共找n-1次,最优O(n^2),最坏O(n^2),不稳定
 5 '''
 6 
 7 def select_sort(s_list):
 8     n = len(s_list)
 9     for j in range(0, n-1):
10         min_v = j
11         for i in range(j+1, n):
12             if s_list[i] < s_list[min_v]:
13                 min_v = i
14         t = s_list[j]
15         s_list[j] = s_list[min_v]
16         s_list[min_v] = t

 




插入排序

 1 #coding:utf-8
 2 '''
 3 从第二个开始 和前面的有序序列比较,比较大小插进去
 4 最优O(n),最坏O(n^2)
 5 '''
 6 
 7 def insert_sort(i_list):
 8     n = len(i_list)
 9     for j in range(1, n):
10         i = j
11         while i > 0:
12             if i_list[i] < i_list[i-1]:
13                 t = i_list[i]
14                 i_list[i] = i_list[i-1]
15                 i_list[i-1] = t
16                 i = i - 1
17             else:
18                 break

 

快速排序

 1 #coding:utf-8
 2 '''
 3 取第一个数为比较值
 4 一个指针左l,一个指针右r,从右边开始
 5 O(nlogn)
 6 '''
 7 
 8 def quick_sort(q_list, left, right):
 9     if left >= right:
10         return
11     low = left
12     high = right
13     mid_value = q_list[left]
14     while low < high:
15         while low < high and q_list[high] >= mid_value:
16             high -= 1
17         q_list[low] = q_list[high]
18         while low < high and q_list[low] < mid_value:
19             low += 1
20         q_list[high] = q_list[low]
21 
22     q_list[low] = mid_value
23     quick_sort(q_list, left, low - 1)
24     quick_sort(q_list, low + 1, right)

 希尔排序

 1 #coding:utf-8
 2 '''
 3 O(nlogn)
 4 '''
 5 
 6 def shell_sort(s_list):
 7     n= len(s_list)
 8     gap = n // 2
 9     while gap > 0:
10         for j in range(gap, n):
11             i = j
12             while i > gap - 1:
13                 if s_list[i] < s_list[i-gap]:
14                     s_list[i-gap],s_list[i] = s_list[i],s_list[i-gap]
15                     i -= gap
16                 else:
17                     break
18         gap = gap // 2

 

posted @ 2019-02-17 21:39  执手凝噎  阅读(153)  评论(0)    收藏  举报