快速排序
- 将列表中第一个元素设定为基准数字,赋值给mid变量,然后将整个列表中比基准小的数值放在基准的左侧,比基准到的数字放在基准右侧。然后将基准数字左右两侧的序列在根据此方法进行排放。
- 定义两个指针,low指向最左侧,high指向最右侧
- 然后对最右侧指针进行向左移动,移动法则是,如果指针指向的数值比基准小,则将指针指向的数字移动到基准数字原始的位置,否则继续移动指针。
- 如果最右侧指针指向的数值移动到基准位置时,开始移动最左侧指针,将其向右移动,如果该指针指向的数值大于基准则将该数值移动到最右侧指针指向的位置,然后停止移动。
- 如果左右侧指针重复则,将基准放入左右指针重复的位置,则基准左侧为比其小的数值,右侧为比其大的数值。
1 #方式一:此方法理解简单,但是系统资源占用过大
2 def quick_sort(int_list):
3 if len(int_list) <= 1: return int_list
4 # divide = int_list.pop()
5 divide=int_list[-1]
6 greater_list, lesser_list = [], []
7 for element in int_list[:-1]:
8 greater_list.append(element) if divide < element else lesser_list.append(element)
9 return quick_sort(lesser_list) + [divide] + quick_sort(greater_list) # 递归进行
10
11 #方式二
12 def quick_sort1(int_list, start, end):
13 low = start
14 high = end
15 if low > high:
16 return int_list
17 divide = int_list[low]
18 while low < high:
19 while low < high:
20 if int_list[high] < divide:
21 int_list[low] = int_list[high]
22 break
23 else:
24 high -= 1
25 while low < high:
26 if int_list[low] > divide:
27 int_list[high] = int_list[low]
28 break
29 else:
30 low += 1
31
32 int_list[low] = divide # 每次调用排好基数位置
33 quick_sort1(int_list, start, low - 1) # 对小于基数的部分进行同样排序操作
34 quick_sort1(int_list, high + 1, end) # 对大于基数的部分进行同样排序操作
35
36 return int_list
37
38
39 # 245,689,3454,123,90987,2,3,4
40 if __name__ == '__main__':
41 int_str = input("请输入逗号分割的整数>>>").strip()
42 int_list = [int(i) for i in int_str.split(",")]
43 print(quick_sort(int_list))
44
45 # print(quick_sort1(int_list, 0, len(int_list) - 1))