首頁  >  文章  >  後端開發  >  使用python實作8大排序演算法-快速排序

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

巴扎黑
巴扎黑原創
2016-11-26 11:46:101048瀏覽

快速排序的基本思想:

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

例:

       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


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn