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