排序算法——计数排序 收藏

本文介绍了基数排序的基本原理和实现过程。基数排序是一种线性时间复杂度的排序算法,适用于固定范围内的整数排序。文章详细展示了如何使用辅助数组记录元素的位置信息,并通过示例代码演示了整个排序流程。

之前分析过对于n个元素进行排序,通过比较的方法比较次数的下限时nlogn,要想实现线性的排序算法,需要获取输入数据的额外信息。

这里介绍基数排序,是一种简单的排序,时间复杂度为O(n),但是需要限定输入数据的范围:例如输入数据是0~K范围内的数据。

在进行排序时,通过辅助数组C[0~K]来记录“输入数组A[0~n]中每个元素A[i]应该在输出数组B[0~n]中的最终位置C[A[i]]“,最后直接将A[i]插入B的合适位置B[C[A[i]]],从而保证输出数组有序。

view plaincopy to clipboardprint?
 1 #include <iostream>  
 2 using namespace std;  
 3 const int K = 100;  
 4   
 5 void count_sort(int *a,int *b,int n)  
 6 {  
 7         int c[K]={0};  
 8         int i =0;  
 9         for(i=0;i<n;i++)  
10                 c[a[i]]++;//c[i]包含等于i的元素个数  
11   
12         for(i=1;i<K;i++)  
13                 c[i]+=c[i-1];//此时,c[i]包含小于等于i的元素个数  
14         int j = 0;  
15         for(j = n-1;j>=0;j--)  
16         {  
17                 b[c[a[j]]-1] = a[j];  
18                 c[a[j]]--;//为了相同的元素  
19         }  
20 }  
21 int main()  
22 {  
23         int a[10] ={1,2,3,5,2,1,6,7,3,10};  
24         int b[10];  
25         count_sort(a,b,10);  
26         int i =0;  
27         for(i=0;i<10;i++)  
28                 cout<<b[i] << " ";  
29         cout << endl;  
30 } 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值