快速排序 從右邊開始

2021-08-19 17:21:18 字數 446 閱讀 1136

先給出快速排序的**

void quicksort(vector

&nums, int left, int right)

}nums[left] = nums[i];

nums[i] = temp;

quicksort(nums, left, i - 1);

quicksort(nums, i + 1, right);

}

以nums[left]作為基數temp,從右邊開始尋找比temp小的元素。對於nums=,進行一次排序,若先從右向左,返回,從左到右,返回。關鍵在於是以最左邊的數nums[left]作為基準,先從右邊開始可保證i,j在相遇的時候,這個數是小於基準的,交換之後temp所在位置的左邊都小於temp。若從左邊開始,相遇時的值是大於基準值的,無法滿足temp左邊的數都小於它。所以,進行掃瞄,要從基準數的對面開始。

快速排序 為何從右開始

這裡兩個while的順序是不能改變的,想一想 假設對如下進行排序 如上圖,6在左,9在右 我們將6作為基數。假設從左邊開始 與正確程式正好相反 while nums i index i j while nums j index j i 按照這個 邏輯,走一遍,i 就會移動到現在的 數字 7 那個位置...

快速排序法為什麼一定要從右邊開始的原因

這裡兩個while的順序是不能改變的,想一想 假設對如下進行排序 如上圖,6在左,9在右 我們將6作為基數。假設從左邊開始 與正確程式正好相反 while nums i index i j while nums j index j i 按照這個 邏輯,走一遍,i 就會移動到現在的 數字 7 那個位置...

從排序開始(二) 希爾排序

希爾排序,是對直接插入排序的改進版本,又稱增量縮小排序,實質上是一種分組插入排序。基本思想是 先取第乙個增量step,以該序列內所有下標相差 step 的元素作為一組,如 array 0 array 0 step array 0 step 2 作為一組,array 1 array 1 step ar...