快速排序的基本思想:
通過一趟排序將要排序的資料分割成獨立的兩部分,其中一部分的所有資料都比另外一部分的所有資料都要小,然後再按此方法對這兩部分資料分別進行快速排序,整個排序過程可以遞迴進行,以此達到整個資料變成有序序。
例:
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