#include#include//排序演算法的穩定性:對於相同的關鍵字,排序之前的位置和排序之後的位置相同,則稱為穩定排序,否則不穩定排序。
//歸併排序:基本思想為:先分解再合併,在合併的過程中進行排序;
//穩定排序;平均時間複雜度為:o(nlogn); 最好時間複雜度o(nlogn);最好時間複雜度o(nlogn);空間複雜度o(n);
void meger(std::vector &data, int begin, int mid,int
end)
int length = end - begin+1
; std::vector
temp(length);
int i =begin;
int j = mid+1
;
int k = 0
;
while (i <= mid&&j <=end)
else
}while (i <=mid)
while (j <=end)
for (i = 0; i < k; i++)
}void divide(std::vector &data, int begin, int
end)
int mid = (begin + end) / 2
; divide(data, begin, mid);
divide(data, mid+1
, end);
meger(data, begin,mid, end);
}void meger_sort(std::vector &data)
divide(data,
0, data.size()-1
);
for(auto each : data) }//
quick sort: 找到中間分割點,根據中間分割點進行排序,再遞迴。
//不穩定;平均時間複雜度o(nlogn); 最好時間複雜度o(nlogn);最壞時間複雜度o(n^2);空間複雜度o(logn)
int partition(std::vector &vec, int left, int
right)
if (left while (vec[left] <=x)
if (left }
vec[right] =x;
return
right;
}void quick_sort(std::vector &vec,int left,int
right)
if (left 選擇排序
//不穩定;平均時間複雜度o(n^2); 最好時間複雜度o(n^2);最壞時間複雜度o(n^2);空間複雜度o(1)
void select_sort(std::vector &vec)
}std::swap(vec[i], vec[mini_index]);
}}//
氣泡排序
//穩定;平均時間複雜度o(n^2); 最好時間複雜度o(n);最壞時間複雜度o(n^2);空間複雜度o(1)
void bubble_sort(std::vector &vec) }}
}void fast_bubble_sort(std::vector &vec)
flag =i;
}len =flag;
}}//
插入排序
//穩定;平均時間複雜度o(n^2); 最好時間複雜度o(n);最壞時間複雜度o(n^2);空間複雜度o(1)
void insert_sort(std::vector &vec)
vec[j+1] =temp;
}}//
堆排序:先建立乙個大根堆,然後將堆頂元素和佇列尾的元素進行交換,這樣就等於大元素放到隊尾了每次交換,
//需要對堆進行調整。
//不穩定;平均時間複雜度o(nlogn); 最好時間複雜度o(nlogn);最壞時間複雜度o(nlogn);空間複雜度o(1)
void adjustheap(std::vector &vec, int index,int
length)
if (vec[k] >temp)
else
}vec[index] =temp;
}void heapsort(std::vector &vec)
//構建最大堆;
for (int i = length / 2 - 1; i >= 0; i--)
//大堆頂元素逐個與末尾元素進行交換。
for (int i = length - 1; i > 0; i--) }//
main 函式測試部門;
intmain() ;
heapsort(vec);
for(auto each : vec)
return0;
}
排序演算法小結(C 實現)
前言 在這裡總結一下各種排序方式以增強理解和之後複習方便,附帶一些優化方式 目錄 非線性時間 1.比較 1氣泡排序 2快速排序 2.插入 1插入排序 2希爾排序 3.選擇 1選擇排序 2堆排序 4.歸併 1二路歸併 2多路歸併 線性o n 1.計數排序 2.堆排序 3.基數排序 正文 1.簡單氣泡排...
C 排序演算法小結
1 計數排序 如果給定上下界,並且區間不大的話,最適用。比如對於英文本母陣列進行排序。時間複雜度o n 空間複雜度o n void countsort int a,int n,int low,int high int ind 0 for int i 0 i size i 2 氣泡排序 基礎版 最基礎...
C 排序演算法小結
前言 演算法這個東西其實在開發中很少用到,特別是web開發中,但是演算法也很重要,因為任何的程式,任何的軟體,都是由很多的演算法和資料結構組成的。但是這不意味著演算法對於每個軟體設計人員的實際工作都是很重要的。每個專案特點和需求特殊也導致演算法運用場景上不同。但是個人覺得演算法運用的好的話會給自己在...