使用python實作8大排序演算法-快速排序

巴扎黑
發布: 2016-12-03 11:23:37
原創
910 人瀏覽過

快速排序的基本思想:

透過一趟排序將要排序的資料分割成獨立的兩部分,其中一部分的所有資料都比另外一部分的所有資料都要小,然後再按此方法對這兩部分數據分別進行快速排序,整個排序過程可以遞歸進行,以此達到整個資料變成有序序。

例:

       arr = [49,38,04,97,76,13,27,49,55,65],設定第一位49為key值,從右向左找到比key值小的數,將找到的數賦值給第一位數;

       arr = [27,38,04,97,76,13,27,49,55,65],然後從左第一位向右找到比key值大的數,把找到的數賦值給上個從右向左找到的數;

       arr = [27,38,04,97,76,13,97,49,55,65],然後從右向左,從左向右,直到left=right,跳出循環,並把key值賦值給些索引值。最後再將兩邊的分組進行遞迴。

代碼:

def quick_sort(lists, left, right):
    #快速排序
    if left >= right:  #当递归调用的分组为1个数时返回列表
        return lists
    key = lists[left]  #保存key值,在一轮调用结束时,存到中间值
    low = left
    high = right  #供递归调用时使用
    while left < right:  #通过下面两个循环依次交替赋值并使key值两侧为大小分组
        while left < right and lists[right] >= key:  
            right -= 1
        lists[left] = lists[right]
        while left < right and lists[left] <= key:
            left += 1
        lists[right] = lists[left]
    lists[right] = key
    quick_sort(lists, low, left-1)  #对key值左侧进行排序分组
    quick_sort(lists, left+1, high)  #对key值右侧进行排序分组
    return lists
登入後複製


相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!