先給出快速排序的**
以nums[left]作為基數temp,從右邊開始尋找比temp小的元素。對於nums=,進行一次排序,若先從右向左,返回,從左到右,返回。關鍵在於是以最左邊的數nums[left]作為基準,先從右邊開始可保證i,j在相遇的時候,這個數是小於基準的,交換之後temp所在位置的左邊都小於temp。若從左邊開始,相遇時的值是大於基準值的,無法滿足temp左邊的數都小於它。所以,進行掃瞄,要從基準數的對面開始。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);
}
快速排序 為何從右開始
這裡兩個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...