基數排序 C (正負數均可 詳解)

2021-10-11 07:48:45 字數 960 閱讀 4072

theory:

​ 從低位到高位, 每次分兩步:

把當前位相同的數放在同乙個桶裡面,如個位數都是1的就都放到1號桶

從[0, radix - 1]把每個桶裡面的數按順序收集起來(radix是數的進製,也是桶的個數,如十進位制數 radix就是10)

然後迴圈執行上述步驟k次,其中k是所有數中最大的數字

attention:

如果全是非負數,那麼只需要開radix個桶;

有負數時開20個(這裡是對於十進位制數), 因為有 -ab % 10 = -b,把[-9, -1]對映到[1, 9],把[0, 9]對映到[10, 19] (即加上10)

code:

int a[7] = , n = 7;         //測試資料

int tank[20][100]; //20個桶, tank[x][i]表示當前位是x的第i個數,這裡tank[x][0]表示tank[x]這個陣列有多少個元素,故存資料時從tank[x][1]開始存

//基數排序(基數就對應著 進製數)

void radixsort()

int cnt = 0;

for(int i = 0; i < 20; i++) //列舉20個桶

//依次拿出每個桶裡面的值[1, tank[i][0]], 注意取出順序和放入順序是一樣的(類似佇列,先進先出),故基數排序穩定

for(int j = 1; j <= tank[i][0]; j++)

a[cnt++] = tank[i][j]; //**

d *= 10; //權重 * 10

} }

如果此篇文章對你有幫助,點個?啦!

python 基數排序詳解

今天簡單的說下基數排序,基數排序比較特殊,他不用元素之間進行比較,也不用元素之間交換位置,你只需要堆元素進行分類就可以了,這個也恰巧就是基數排序的魅力。基數排序思想 基數排序是桶排序的一種擴充套件,將整數按位數分割成不同數字,然後按照每個位數分別比較 過程 1.分配 先從個位開始,根據位值 0 9 ...

基數排序 C

首先我們引入乙個多關鍵排序的概念 多關鍵字排序 假如現在有乙個員工表,要求按照薪資排序,年鈴相同的員工按照年齡排序。比如氣泡排序就是一種穩定排序,堆排序就是不穩定的排序,品,你細細的品 那麼對32,13,94,52,17,54,93排序,是否可以看做多關鍵字排序?比如32 13 52排序,先看個位2...

基數排序(c )

題目描述 根據輸入,輸出基數排序的每趟排序結果。輸入格式 輸入數字為正整數,先輸入排序數字個數,然後輸入需要排序的數字序列。輸出 每趟排序結果。要求 程式需要實現排序,其他可以使用stl包。示例測試集 輸入 8 2343666 152310 5594 592783278 輸出 152310 2343...