YTU 2758 C 習題 基數排序

2021-09-21 17:46:54 字數 953 閱讀 7978

基數排序是一種分配排序,其基本思想是:排序過程無須比較關鍵字,而是通過「分配」和「收集」過程來實現排序。它們的時間複雜度可達到線性o(n)。基數排序所做的事情,是對n位分別進行排序。從直覺上來看,人們可能會覺得應該首先按最高有效位進行排序,不過這點與我們的直覺相反,基數排序首先對最低有效位數字進行排序。如果我們每次比較r bits,則需要進行b/r趟,每趟進行計數排序需要o(n+2^r),則總的時間複雜度為o(b/r(n+2^r))。

理論上來說,基數排序的速度是幾種排序方法中最快的,可以達到o(n),而其它的排序演算法最快也只有o(n*logn)。但是,基數排序需要占用額外的空間,而且只支援整數進行排序。

#include

#include

using namespace std;

/* 獲取輸入數字的索引值,order指定需要獲取哪一位的索引,1代表個位,2代表十位,3代表百位 */

int get_index(int num, int order)

/* 進行基數排序 */

void radix_sort(int arr, int len, int dec, int order)

for (i=0; i>n;

for(i=0; i>arr[i];

int dec=3;      /* 最多處理位數 */

int order= 1;   /* 排序的位數,1代表個位、2代表十位、3代表百位 */

/* 排序函式,從個位開始 */

radix_sort(arr, n, dec, order);

for (i=0; i輸入n和n個整數

從小到大排序

copy

10

2 1 3 4 6 5 7 9 8 10

1 2 3 4 5 6 7 8 9 10
radix_sort(arr,len,dec,order+1);

oj 2758 C 習題 基數排序

問題 基數排序是一種分配排序,其基本思想是 排序過程無須比較關鍵字,而是通過 分配 和 收集 過程來實現排序。它們的時間複雜度可達到線性o n 基數排序所做的事情,是對n位分別進行排序。從直覺上來看,人們可能會覺得應該首先按最高有效位進行排序,不過這點與我們的直覺相反,基數排序首先對最低有效位數字進...

基數排序 C

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

基數排序(c )

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