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

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

基數(shù)排序 Radix Sort

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

基數(shù)排序是在某種情況下比快速排序還快的排序.當然了,計數(shù)排序(Counting Sort)也有可能比快速排序快. 計數(shù)排序非常容易理解,時間復(fù)雜度是O(MAX(a[i])), 如果數(shù)據(jù)范圍很小的話,計數(shù)排序有巨大優(yōu)勢. 而基數(shù)排序,則更進一步,對每一位進行計數(shù)排序. 這樣時間復(fù)雜度降為O(N*log(MAX(a[i])) 以下代碼實現(xiàn)了從小到大cntSort()和從大到小cntSort2().實際上也可以倒置得到從大到小,依然是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ā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 卓尼县| 堆龙德庆县| 榆树市| 楚雄市| 铁岭市| 三都| 晋江市| 周至县| 宁陵县| 麻城市| 霍林郭勒市| 广东省| 侯马市| 长兴县| 永修县| 海安县| 什邡市| 宣恩县| 刚察县| 卢湾区| 阜新市| 施秉县| 青浦区| 沁水县| 维西| 无棣县| 灵璧县| 大化| 南昌县| 深圳市| 漠河县| 南部县| 金门县| 徐州市| 潢川县| 上犹县| 呼玛县| 台州市| 来安县| 枣强县| 邳州市|