zoukankan      html  css  js  c++  java
  • 快速排序

    • 快速排序(英语:Quicksort),又称为交换排序,通过一趟排序将要排序的数据分割为独立的两部分。假设要排序的列表是 A[0]……A[N-1],首先任意选取一个数据(通常选用列表的第一个数)作为基准数据,然后将所有比它小的数都放到它左边,所有比它大的数都放到它右边,这个过程称为一趟快速排序。值得注意的是,快速排序不是一种稳定的排序算法,也就是说,多个相同的值的相对位置也许会在算法结束时产生变动。
    • 步骤:
      (1) 设置两个变量 low、high,排序开始的时候:low=0,high=N-1;
      (2) 以第一个列表元素作为基准数据,赋值给 mid,即 mid=A[0];
      (3) 从 high 开始向前搜索,即由后开始向前搜索(high--),找到第一个小于 mid 的值A[high],将 A[hight]和 A[low]的值交换;
      (4) 从 low 开始向后搜索,即由前开始向后搜索(low++),找到第一个大于 mid 的A[low],将 A[low]和 A[high]的值交换;v>
      (5) 重复第 3、4 步,直到 low=high。
       1 def quick_sort(alist,start,end):
       2     #递归退出的条件
       3     if start >= end:
       4         return
       5     #基准数
       6     mid = alist[start]
       7     low = start
       8     high = end
       9     while low < high:
      10         #从右向左
      11         while low < high and alist[high] > mid:
      12             high -= 1
      13         #将high索引对应的元素赋值给low
      14         alist[low] = alist[high]  
      15         #从左往右
      16         while  low < high and alist[low] < mid:
      17             low += 1
      18         alist[high] = alist[low]                                          
      19     #将基准数放置到对应位置
      20     alist[low] = mid 
      21     #比基准数小的左边的数 重复调用quick_soort()
      22     quick_sort(alist,start,low-1)
      23     ##比基准数大的右边的数 重复调用quick_soort()
      24     quick_sort(alist,low+1,end)
      25 if __name__ == '__main__':
      26     alist = [54,26,93,17,77,31,44,55,20]
      27     print('原数组:',alist)
      28     quick_sort(alist,0,len(alist)-1)
      29     print('现数组:',alist)
      1 原数组: [54, 26, 93, 17, 77, 31, 44, 55, 20]
      2 现数组: [17, 20, 26, 31, 44, 54, 55, 77, 93]
      最优时间复杂度:O(nlogn)
      最坏时间复杂度:O(n2)
      稳定性:不稳定
       
       
       
       
       
       
       
       
       
       
       
       
    正是江南好风景
  • 相关阅读:
    Codeforces 414A
    使用Homebrew在Mountain Lion上安装MySQL
    hdu2066:一个人的旅行(最短路)
    hdu2066:一个人的旅行(最短路)
    hdu1297:Children’s Queue(大数递推)
    hdu1297:Children’s Queue(大数递推)
    hdu1175: 连连看(bfs)
    hdu1175: 连连看(bfs)
    PID72 / 拔河比赛 (动态规划)
    PID72 / 拔河比赛 (动态规划)
  • 原文地址:https://www.cnblogs.com/monsterhy123/p/12728417.html
Copyright © 2011-2022 走看看