記錄最近學習的一些排序演算法
注:①第乙個演算法給出了完整的測試程式,其餘的為避免重複及節省空間,只顯示排序演算法部分**
②執行結果的程式耗時每次執行略有不同,僅供大致對比參考
時間複雜度:o(n)[最好],o(n2)[平均],o(n2)[最差]
空間複雜度:o(1)
**:
#include
#include
//計時用
using namespace std;
//氣泡排序演算法
void
bubblesort
(int data,
int n)}if
(flag)
break;}
//列印結果資訊
queryperformancecounter
(&t2)
; dt =
(t2.quadpart - t1.quadpart)/(
double
)nfreq.quadpart;
cout <<
"\n 此次排序耗時: "
<< dt *
1000000
<<
"us"
; cout <<
"\n 執行了"
<"次swap交換"
; cout <<
"\n 排序結果為:"
;for
(int i =
0; i < n; i++
) cout << data[i]
<<
" ";
cout << endl;
}//主函式
intmain
(void);
bubblesort
(testdata1,10)
;int testdata2[10]
=;bubblesort
(testdata2,10)
;return0;
}
執行結果:
待排序資料為:1 3 5 7 9 2 4 6 8 0
此次排序耗時: 2us
執行了19次swap交換
排序結果為:0 1 2 3 4 5 6 7 8 9
待排序資料為:0 1 2 3 4 9 8 7 6 5
此次排序耗時: 1.1us
執行了10次swap交換
排序結果為:0 1 2 3 4 5 6 7 8 9
請按任意鍵繼續. . .
時間複雜度:o(n2)[最好],o(n2)[平均],o(n2)[最差]
空間複雜度:o(1)
主要**:
//n-1次外迴圈,每次選出最大的放在最右邊
//內迴圈與最大值比較,記錄最大值的標籤
void
selectsort
(int data,
int n)
swap
(data[max]
, data[i]);
//count++;
}//列印結果資訊(**略)
}
執行結果:
待排序資料為:1 3 5 7 9 2 4 6 8 0
此次排序耗時: 1.1us
執行了9次swap交換
排序結果為:0 1 2 3 4 5 6 7 8 9
待排序資料為:0 1 2 3 4 9 8 7 6 5
此次排序耗時: 1us
執行了9次swap交換
排序結果為:0 1 2 3 4 5 6 7 8 9
請按任意鍵繼續. . .
時間複雜度:o(n)[最好],o(n2)[平均],o(n2)[最差]
空間複雜度:o(1)
主要**:
//插入排序
void
insertionsort
(int
* data,
int n)
data[j]
= tmp;
//插入值
}//列印結果資訊(**略)
}
執行結果:
待排序資料為:1 3 5 7 9 2 4 6 8 0
此次排序耗時: 0.3us
排序結果為:0 1 2 3 4 5 6 7 8 9
待排序資料為:0 1 2 3 4 9 8 7 6 5
此次排序耗時: 0.2us
排序結果為:0 1 2 3 4 5 6 7 8 9
請按任意鍵繼續. . .
時間複雜度:o(nlogn)[最好],o(nlogn)[平均],o(n2)[最差]
空間複雜度:o(logn)
主要**:
//軸點構造演算法
intpartition
(int x,
int lo,
int hi)
//assert:lo==hi
x[lo]
= pivot;
//將備份的軸點記錄置於前後子向量之間
return lo;
//返回軸點的秩
}//整體快速演算法
void
quicksort
(int x,
int lo,
int hi)
執行結果:
待排序資料為:1 3 5 7 9 2 4 6 8 0
此次排序耗時: 5.1us
排序結果為:0 1 2 3 4 5 6 7 8 9
請按任意鍵繼續. . .
時間複雜度:o(nlogn)[最好],o(nlogn)[平均],o(nlogn)[最差]
空間複雜度:o(n)
主要**:
//合併兩個有序陣列
void
merge
(int x,
int lo,
int mi,
int hi)
delete[
] b;
}//整體歸併演算法
void
mergesort
(int x,
int lo,
int hi)
執行結果:
待排序資料為:1 3 5 7 9 2 4 6 8 0
此次排序耗時: 4.4us
排序結果為:0 1 2 3 4 5 6 7 8 9
請按任意鍵繼續. . .
排序演算法總結 C 版)
1 時間複雜度 分析關鍵字比較次數和記錄的移動次數 2 空間複雜度 需要的輔助記憶體 3 穩定性 相同的關鍵字計算後,次序是否不變。直接插入排序 insertionsort 的基本思想是 每次將乙個待排序的記錄,按其關鍵字大小插入到前面已經排好序的子串行中的適當位置,直到全部記錄插入完成為止。例如 ...
分治演算法排序(C 版)
分治排序 把乙個陣列分成兩個陣列,然後在把這兩個陣列再各自分成兩個陣列,直到陣列有兩個數,然後比較這兩個數,並且合併,排序。就是上面這個樣子 的。不說了上 c 版 name 分治演算法 time 15 8 9 14 25 environment ubuntu 14.04,sublime text 3...
C 版 常用排序演算法。
1 個人學習記錄。2 大佬請繞道。using system.collections using system.collections.generic using unityengine namespace datastructure.wcc region 穩定排序 歸併排序 氣泡排序 插入排序。re...