十大排序總結(一,簡易篇)

2021-09-29 01:45:33 字數 1647 閱讀 7007

1.氣泡排序

大一就學的必備技能,最簡單的排序時i,j都從0-n進行判斷swap,雖然也是o(n2)但這種排序低階到無法進入我們的十大排序中,所以要對其進行一下優化,就是i從0-n,但j可以從n-1到i,這樣節省了不必要的操作。

冒泡就是說每個數與後面的比較,這樣每次就會把未排序的最大的浮到後面。最壞(完全亂序,退化到剛才說的不入流方法)和平均時間複雜度為o(n2),最好就是o(n)(本來就有序,一趟完成),空間複雜度為o(1)。

void

bubble

(vector<

int>

& a)}}

}

2.選擇排序

就是每次從未排序陣列中選擇乙個最小的放在已排序的最右邊,思路很簡單,就是每次都得遍歷完全部陣列才能找到最小的。最好最壞平均時間複雜度均為o(n2),空間複雜度為o(1)。

選擇排序的元素的比較次數與初始序列無關,直接選擇排序的時間複雜度與初始序列無關的。

void

select

(vector<

int>

&a)swap

(a[i]

, a[index]);

}}

3.插入排序

顧名思義,就是將當前遍歷到的數插入到已排序陣列裡。它與選擇排序相比,不需要每趟走完陣列,只要找到合適的位置就可以結束該次迴圈了

時間複雜度為o(n2),最好o(n)。空間o(1).

直接插入排序

void

insert

(vector<

int>

& a)

}}

折半插入:就是在插入時採用二分法來定位該插到哪,節省比較次數。

void

bininsert

(vector<

int>

& a)

//統一移動元素,然後將這個元素插入到正確的位置

temp = a[i]

;for

(j = i; j > high +

1; j--

) a[high +1]

= temp;

}}

void

shellinsert

(vector<

int>

& a,

int d)

if(i != t - d)

a[i + d]

= tmp;}}

void

shellsort

(vector<

int>

& a)

}

5.計數排序

計數排序是一種線性排序演算法,不需要進行比較,時間複雜度為o(n)。(注意是計數排序不是基數排序,兩者不同)

基本思想是:對於每個元素x,找出比x小的數的個數,從而確定x在排好序的陣列中的位置。此演算法需要輔助陣列,是以空間換時間。

其實就是桶排序的優化,限制並計算好了額外空間的最佳大小。

void

countsort

(vector<

int>

&arr,

int maxval)

}

十大排序演算法速記總結

選取第乙個數為哨兵 將比哨兵小的數都交換到前面,比哨兵大的數都交換到後面 返回哨兵位置,根據哨兵位置劃分左右區間重複第二步,直到各區間只有乙個數。int partition vector nums,int left,int right 再找左邊,只要左邊的數 哨兵就繼續 while i j nums...

十大排序演算法

1.非線性時間類排序 時間複雜度未突破 0 nlog 2n 不穩定的四個排序演算法 選擇排序 0 n2 希爾排序 0 n1.3 希爾排序實現python 快速排序 0 n log2 n 0 nlog 2n 0 nlog 2 n 快速排序實現c python 堆排序 0 n log2 n 0 nlog...

十大排序演算法

排序規則 從左至右依次增大 一 基於比較的排序演算法 插入排序 逐個遍歷未排序序列,將其在已排序序列中從右到左比較,直到遇到比自己小的數,然後將元素插入到那個數的後面,有序序列從左向右生長。選擇排序 在未排序序列中選擇最小的元素,將其插入到已排序序列的末尾,有序序列從左向右生長。氣泡排序 從左至右逐...