博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
基数排序
阅读量:4947 次
发布时间:2019-06-11

本文共 1074 字,大约阅读时间需要 3 分钟。

基数排序是一种非比较排序,它的时间复杂度为O(K*N),其中k是最大那个数的长度,

基数排序其实是一种桶式排序的优化,它适用于N中数据比较大情况,一位一位的去排序最后得到我们要得到的序列

解题代码:

1 //基数排序 2 #include 
3 #define MAX 1000000 4 void print(int *a, int n) 5 { 6 int i; 7 for (i = 0; i < n; i++) 8 printf("%d\t", a[i]); 9 }10 11 void radixsort(int *a, int n)12 {13 int i, b[MAX], m = a[0], exp = 1;14 for (i = 1; i < n; i++)15 {16 if (a[i] > m)17 m = a[i];18 }19 20 while (m / exp > 0)21 {22 int bucket[10] ={ 0 };23 for (i = 0; i < n; i++)24 bucket[(a[i] / exp) % 10]++;25 for (i = 1; i < 10; i++)26 bucket[i] += bucket[i - 1];27 for (i = n - 1; i >= 0; i--)28 b[--bucket[(a[i] / exp) % 10]] = a[i];29 for (i = 0; i < n; i++)30 a[i] = b[i];31 exp *= 10;32 }33 }34 35 36 int arr[MAX];37 int main()38 {39 int i, n;40 41 scanf("%d", &n);42 43 for (i = 0; i < n; i++)44 scanf("%d", &arr[i]);45 46 radixsort(&arr[0], n);47 48 print(&arr[0], n);49 printf("\n");50 51 return 0;52 }
View Code

 

转载于:https://www.cnblogs.com/zyue/p/3305683.html

你可能感兴趣的文章
通过目标站点收集信息
查看>>
C#中抽象类和接口的区别
查看>>
materail ui 资源
查看>>
Maven2实践1-环境安装与准备
查看>>
UVA-1611 Crane (构造)
查看>>
linux下的watch命令
查看>>
鼠标滚动兼容
查看>>
WebServer
查看>>
Perl 三种时间time,localtime,gmttime
查看>>
用unity surface shader 重新渲染dota2 模型
查看>>
BZOJ—— 3402: [Usaco2009 Open]Hide and Seek 捉迷藏
查看>>
codevs——T3657 括号序列
查看>>
读书笔记1
查看>>
[spring-boot] 健康状况监控
查看>>
Android 生命周期
查看>>
B. Complete the Word(Codeforces Round #372 (Div. 2)) 尺取大法
查看>>
Codeforces Round #540 (Div. 3)题解
查看>>
css选择器,伪类和伪元素的区别
查看>>
Linux系统调优及安全设置
查看>>
页面不可编辑
查看>>