(1)氣泡排序
時間複雜度:
最壞情況和平均情況:o(n²)
最好情況:o(n)
屬於穩定排序
void
bubble_sort
(vector<
int>
&nums)}if
(flag ==0)
break;}
return
;}
(2)選擇排序
時間複雜度:
最壞情況,最好情況,平均情況:o(n²)
不是穩定排序
適用於資料量小的或有部分資料已經做過排序的情況;
void
select_sort
(vector<
int>
&nums)}}
return
;}
(3)插入排序
時間複雜度:
最壞情況、平均情況:o(n²)
最好情況:o(n)
是穩定排序
插入排序用於大部分資料已經過排序或已排序的資料庫在新增資料後再進行排序
void
insert_sort
(vector<
int>
&nums)
nums[j+1]
= temp;
}}
(4)希爾排序
希爾排序是插入排序的變形,但希爾排序不受輸入資料順序的影響
任何狀況的時間複雜度都為o(n3/2),適用於資料大部分都已經排序完成的情況
void
shell_sort
(vector<
int>
&nums)
nums[j+jump]
= temp;
} jump = jump /2;
}return
;}
(5)快速排序
快速排序是平均執行時間最快的排序法,在最好和平均情況下複雜度為o(nlogn)
最壞情況下就是每次挑中的中間值不是最大就是最小,複雜度為o(n²)
在最差情況下,空間複雜度為o(n),而最佳情況下為o(logn)
void
quick_sort_core
(vector<
int>
&nums,
int l,
int r)
while
(nums[i]
< nums[flag]
&& i < j)
if(i >= j)
break
;swap
(nums[i]
, nums[j]);
j--; i++;}
swap
(nums[flag]
, nums[j]);
quick_sort_core
(nums, l, j -1)
;quick_sort_core
(nums, j +
1, r);}
void
quick_sort
(vector<
int>
&nums)
(6)歸併排序
void
merge
(vector<
int>
&nums,
int l,
int mid,
int r)
else}if
(l > m)
}else
}int numbers = r - l;
for(
int num =
0; num <= numbers; num++)}
void
m_sort
(vector<
int>
&nums,
int l,
int r)
void
merge_sort
(vector<
int>
&nums)
(7)堆排序
void
heapsort
(std::vector<
int>
&nums)
for(
int j=end-
1;j>=
0;j--)}
void
heapjust
(std::vector<
int>
&nums,
int begin,
int end)
if(nums[begin]
)else
break;}
}
各種排序演算法實現及總結
本文主要比較一下各種排序的效能 平均時間複雜度和最差情況 和基本實現。這個預設按照從小到大排列,輸入的資料可以重複,假設輸入的陣列為a,下標從0到n 1 注意在比較演算法複雜度時,我們會關注鍵值的比較次數和交換次數。1 氣泡排序 氣泡排序如果不是因為名字比較好記,沒有任何優勢。它的思路是一趟又一趟的...
各排序演算法總結及實現
1.插入排序 insertsort 插入排序通過把序列中的值插入乙個已經排序好的序列中,直到該序列的結束。插入排序是對氣泡排序的改進。它比氣泡排序快2倍。適用於資料在1000一下的場合下使用插入排序,或者重複排序不超過200資料項的序列。遍歷陣列,遍歷到i時,a0,a1 ai 1是已經排好序的,取出...
排序演算法總結及java實現
十種排序演算法的基本特性 排序演算法 平均時間複雜度 最好情況 最壞情況 空間複雜度 排序方式 穩定性快速排序 nlogn nlogn n2 logn in place 不穩定歸併排序 nlogn nlogn nlogn n out place 穩定堆排序 nlogn nlogn nlogn 1 i...