所有的排序演算法總結

2021-10-23 06:31:23 字數 2229 閱讀 6219

1.快排 時間複雜度o(nlogn),最壞o(n2),空間複雜度最好logn,.最壞n

void quick_sort(vector& b, int l, int r)

b[i] = base;

quick_sort(b, l, i-1);

quick_sort(b, i+1, r);

}

2.插入排序 o(n2),穩定,原地排序

void insert_sort(vector& nums)

nums[j+1] = a;}}

3.折半插入排序:僅僅減少了比較的次數 o(n2), 原地排序

void insert_sort2(vector& a ) // 加入了二分查詢的插入排序

for (int j = i; j > ed + 1; j--) a[j] = a[j - 1];

a[ed + 1] = base;

} }}

4.選擇排序 o(n2),不穩定

void select_sort(vector& nums)

if (k != i) swap(nums[i], nums[k]);}}

5.歸併排序

void merge(vector& nums, int st, int mid, int ed)

while (i <= mid) tmp[t++] = nums[i++];

while (j <= ed) tmp[t++] = nums[j++];

for (int i = 0; i < len; i++) nums[i+st] = tmp[i];

}void sort(vector& nums, int st, int ed)

}

6.希爾排序 o(n^1.3) 到 o(n2) 不穩定, 4 1 1 3

void shell_sort(vector& nums)

nums[j+gap] = a;

}gap /= 2;}}

7.堆排序 o(nlogn),不穩定

void build(vector& nums, int i, int len)

}void sort(vector& nums)

for (int i = len-1; i >= 0; i--)

}

8. 基數排序

9.桶排序 時間複雜度 假設有n個數,m個桶,那麼複雜度為 o(n+n/m*mlog(n/m)) = o(n+nlogn/m) 空間複雜度 o( n+m) 

乙個參考鏈結如下:

基於m個桶的實現 

由於桶排序是如果基於快排實現,就不是穩定的排序演算法

如果是基於歸併排序實現的,則可以完成穩定的排序。

void sort(vector& nums)

vectorvec(max-min+1, 0);

for (int i = 0; i < nums.size(); i++) vec[nums[i]-min]++;

int t = 0;

int len = nums.size();

vectorvec0(len, 0);

for (int i = 0; i <= max-min; i++)

nums = vec0;

}

10. 計數排序 (穩定,o(n+k)

void jishu(vector& nums)

int gap = max - min + 1;

vectortmp(gap, 0);

for (int i = 0; i < nums.size(); i++) tmp[nums[i]-min]++;

for (int i = 1; i < gap; i++) tmp[i] += tmp[i-1];

vectorc(len, 0);

for (int i = len - 1; i >= 0; i--)

nums = c;

}

最後附上一張

劍指offer所有的題目總結

零 小結 一 位運算 1 二進位制中1的個數 2 判斷二進位制中0的個數 3.二進位制高位連續0的個數 二 二叉樹 1 二叉搜尋樹第k個結點 2.0 從上往下列印二叉樹 2.1二叉樹列印成多行 2.2按之字形順序列印二叉樹 題目描述 3.資料流中位數 4.二叉樹中和為某一值的路徑 5.重建二叉樹 6...

所有排序總結(內排序)

花時間把所有的排序重新 寫了一遍。應該是認真寫過一遍,學的時候根本就沒寫過 寫得時候才發現,理解不深刻。基本上 只是懂怎麼做,不懂為什麼。把我寫得記在這裡,以後用得著了回來看看。暫時就到這裡吧,以後有時間,繼續研究這些東西。在寫出來。三個o n2 的演算法 選擇排序 1 void selection...

輸出所有的拓撲排序 此後無良辰

由aov網構造拓撲序列的拓撲排序演算法主要是迴圈執行以下兩步,直到不存在入度為0的頂點為止。1 選擇乙個入度為0的頂點並輸出之 2 從網中刪除此頂點及所有出邊。附上原始碼 鏈式前向星儲存,鄰接矩陣一樣 void tuopu 注 拓撲排序不唯一分界線 分界線 要輸出所有的拓撲排序肯定要嘗試所有的順序 ...