先對排序演算法來個總結:
其中不穩定的有:快,選,希,堆;
時間複雜度為o(nlogn)的有:快,歸,堆, 其中後兩者的平均最好和最壞的時間複雜度都一樣,而快速排序的最差複雜度為o(n^2),即初始排序為完全逆序的時候,所以快速排序的效能是會受到初始排序的影響的;
即穩定時間複雜度又低的最優排序演算法應該是歸併排序,但是歸併演算法的空間複雜度為o(n);
希爾排序的平均,最好,最壞的時間複雜度都不一樣,
除了歸併排序和快速排序,其他排序演算法的空間複雜度都是o(1);
快速排序是不穩定的排序,演算法複雜度為o(nlogn);
#include#include#include#includeusing namespace std;
//快速排序
int partition(vector& nums, int low, int high)
swap(nums[low],r);//在low位置前的都小於r,在low位置後面的都大於r;
return low;
}void quicksort(vector& nums,int low,int high)
; quicksort(nums,0,nums.size()-1);
return 0;
}
基礎演算法複習 快速排序
1.最近一直在忙課程,每天只能抽空刷幾道leetcode,好久沒看js了.有點慌,但是先抽空把排序演算法啥的寫一遍吧,等忙完作業系統課設再好好複習js.2.快速排序演算法思想大概就是設定乙個基準值,根據基準值不斷地交換陣列中前後的元素值,在此過程中目的是把基準值排序到最終的位置,再對基準值位置之前和...
排序演算法之一 快速排序
1 先從數列中取出乙個數作為基準數。2 分割槽過程,將比這個數大的數全放到它的右邊,小於或等於它的數全放到它的左邊。3 再對左右區間重複第二步,直到各區間只有乙個數。1 預排序的輸入非常常見,因此不要選擇第乙個數作為基準數 2 隨機數的生成也較為昂貴 3 採用三數中值分割法 取左中右三個元素的中值作...
ACM道路之一 基礎演算法(快速排序)
快速排序 qsort 本質是分治思想 排序的一次劃分演算法從兩頭交替搜尋,直到low和high重合,因此其時間複雜度是o n 而整個快速排序演算法的時間複雜度與劃分的趟數有關。快速排序三個步驟 1 確定區域,左邊界 l 右邊界 r 基準值 x l r 2 2 保證區間內,x左側的任意值小於x,x右側...