`
wanglei6744
  • 浏览: 25440 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

python 诠释 快速排序

阅读更多

 

快速排序使用分治法 (Divide and conquer)策略来把一个串行 (list)分为两个子串行(sub-lists)。

步骤为:

  1. 从数列中挑出一个元素,称为 "基准"(pivot),
  2. 重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition) 操作。
  3. 递归 地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。

递归的最底部情形,是数列的大小是零或一,也就是永远都已经被排序好了。虽然一直递归下去,但是这个算法总会退出,因为在每次的迭代(iteration)中,它至少会把一个元素摆到它最后的位置去。

(以上摘自 wiki)

python 实现为:

 

def sub_sort(array,low,high) :
  3     key = array[low]
  4     while low < high :
  5         while low < high and key <= array[high] :
  6            high -= 1
  7         while low < high and key > array[high] :
  8            array[low] = array[high]
  9            low += 1
 10            array[high] = array[low]
 11     array[low] = key
 12     return low
 13 
 14 
 15 
 16 def quick_sort(array,low,high) :
 17     if low < high :
 18         key_index = sub_sort(array,low,high)
 19         quick_sort(array,low,key_index)
 20         quick_sort(array,key_index+1,high)
 21 
 22 
 23 if __name__ == '__main__':
 24     array = [8,10,6,4,5,13,26,18]
 25     print array
 26     quick_sort(array,0,len(array)-1)
 27     print array
  • 大小: 18.8 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics