快速排序 Python实现

说起快排的Python实现,首先谈一下,快速排序的思路:

1、取一个参考值放到列表中间,初次排序后,让左侧的值都比他小,右侧的值,都比他大。

2、分别对左侧和右侧的部分递归第1步的操作

实现思路:

  • 两个指针left,right分别指向列表的第一个元素和最后一个元素,然后取一个参考值,默认为第一个列表的第一个元素list[0],称为K
  • 然后left指向的值先和参考值K进行比较,若list[left]小于或等于K值,left就一直向右移动,left+1,直到移动到大于K值的地方,停住
  • right指向的值和参考值K进行比较,若list[right]大于K值,right就一直向左移动,right-1,直到移动到小于K值的地方,停住
  • 此时,left和right若还没有相遇,即left还小于right,则二者指向的值互换
  • 若已经相遇则说明,第一次排序已经完成,将list[right]与list[0]的值进行互换,进行之后的递归

编程实现:

 1 #快排的主函数,传入参数为一个列表,左右两端的下标
 2 def QuickSort(list,low,high):
 3     if high > low:
 4         #传入参数,通过Partitions函数,获取k下标值
 5         k = Partitions(list,low,high)
 6         #递归排序列表k下标左侧的列表
 7         QuickSort(list,low,k-1)
 8         # 递归排序列表k下标右侧的列表
 9         QuickSort(list,k+1,high)
10 
11 def Partitions(list,low,high):
12     left = low
13     right = high
14     #将最左侧的值赋值给参考值k
15     k = list[low]
16     #当left下标,小于right下标的情况下,此时判断二者移动是否相交,若未相交,则一直循环
17     while left < right :
18         #当left对应的值小于k参考值,就一直向右移动
19         while list[left] <= k:
20             left += 1
21         # 当right对应的值大于k参考值,就一直向左移动
22         while list[right] > k:
23             right = right - 1
24         #若移动完,二者仍未相遇则交换下标对应的值
25         if left < right:
26             list[left],list[right] = list[right],list[left]
27     #若移动完,已经相遇,则交换right对应的值和参考值
28     list[low] = list[right]
29     list[right] = k
30     #返回k值
31     return right
32 
33 list_demo = [6,1,2,7,9,3,4,5,10,8]
34 print(list_demo)
35 QuickSort(list_demo,0,9)
36 print(list_demo)

 

posted @ 2017-11-15 17:00  鲸落丶  阅读(12128)  评论(3编辑  收藏  举报