国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

基數(shù)排序 Radix Sort

2019-11-11 07:16:49
字體:
供稿:網(wǎng)友

基數(shù)排序是在某種情況下比快速排序還快的排序.當(dāng)然了,計數(shù)排序(Counting Sort)也有可能比快速排序快. 計數(shù)排序非常容易理解,時間復(fù)雜度是O(MAX(a[i])), 如果數(shù)據(jù)范圍很小的話,計數(shù)排序有巨大優(yōu)勢. 而基數(shù)排序,則更進(jìn)一步,對每一位進(jìn)行計數(shù)排序. 這樣時間復(fù)雜度降為O(N*log(MAX(a[i])) 以下代碼實(shí)現(xiàn)了從小到大cntSort()和從大到小cntSort2().實(shí)際上也可以倒置得到從大到小,依然是O(N),代碼比較迷的地方就是output數(shù)組,記住循環(huán)順序,這個比較巧妙,具體參見 http://www.geeksforgeeks.org/radix-sort/

#include <bits/stdc++.h>using namespace std;int idx(int x, int exp){ return (x / exp) % 10;}void cntSort(int *a, int n, int exp){ int cnt[10] = {0}; int output[n]; for (int i = 0; i < n; i++) cnt[idx(a[i], exp)]++; for (int i = 1; i < 10; i++) cnt[i] += cnt[i - 1]; for (int i = n - 1; i >= 0; i--) { output[cnt[idx(a[i], exp)] - 1] = a[i]; cnt[idx(a[i], exp)]--; } for (int i = 0; i < n; i++) a[i] = output[i];}void cntSort2(int *a, int n, int exp){ int cnt[10] = {0}; int output[n]; for (int i = 0; i < n; i++) cnt[idx(a[i], exp)]++; for (int i = 8; i >= 0; i--) cnt[i] += cnt[i + 1]; for (int i = 0; i < n; i++) { output[cnt[idx(a[i], exp)] - 1] = a[i]; cnt[idx(a[i], exp)]--; } for (int i = 0; i < n; i++) a[i] = output[i];}int main(){ //freopen("in", "r", stdin); int n; scanf("%d", &n); int a[n]; int mx = 0; for (int i = 0; i < n; i++) { scanf("%d", &a[i]); mx = max(a[i], mx); } for (int exp = 1; mx / exp > 0; exp *= 10) cntSort(a, n, exp); for (int i = 0; i < n; i++) cout << a[i] << ' '; cout << endl; for (int exp = 1; mx / exp > 0; exp *= 10) cntSort2(a, n, exp); for (int i = 0; i < n; i++) cout << a[i] << ' ';}
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 呼图壁县| 平塘县| 山东省| 石首市| 行唐县| 察哈| 和静县| 安乡县| 山西省| 康定县| 天津市| 海宁市| 宜君县| 南宫市| 荆州市| 望奎县| 瓦房店市| 龙山县| 辉县市| 望江县| 如皋市| 同德县| 横峰县| 温州市| 北海市| 靖远县| 固原市| 兴国县| 油尖旺区| 巨野县| 乐昌市| 达州市| 萨迦县| 新河县| 皋兰县| 武陟县| 株洲县| 井陉县| 濮阳县| 绵竹市| 化隆|