堆排序
前言
基数排序(Radix Sort)是一种非比较型的排序算法,其基本原理是将整数按位数分配,然后按每个位数进行排序。基数排序的稳定性以及时间复杂度与输入数据的分布有关。
一、基数排序是什么?
最高位优先法(MSD)最低位优先法(LSD)
具体数据
二、如何使用
1.源代码
代码如下(示例):
#include<iostream>
#include<algorithm>
#include<cstring>
#include<time.h>
using namespace std;
int GetMaxDigit(int *a, int n){
int maxdata = *max_element(a, a + n);
int maxdigit = 0;
while(maxdata){
maxdata /= 10;
maxdigit++;
}
return maxdigit;
}
void RadixSort(int *a, int n){
int base = 1, digit = GetMaxDigit(a, n);
int *tmp = new int[n];
int *count = new int[10];
int *start = new int[10];
while(digit--){
memset(count, 0, 10 * sizeof(int));
for(int i = 0; i < n; i++){
int index = a[i] / base % 10;
count[index]++;
}
memset(start, 0, 10 * sizeof(int));
for(int i = 1; i < 10; i++)
start[i] = count[i - 1] + start[i - 1];
memset(tmp, 0, n * sizeof(int));
for(int i = 0; i < n; i++){
int index = a[i] / base % 10;
tmp[start[index]++] = a[i];
}
memcpy(a, tmp, n * sizeof(int));
base *= 10;
}
delete[] tmp;
delete[] count;
delete[] start;
}
void show(int *a, int n){
for(int i = 0; i < n; i++)
cout<<*(a + i)<<" ";
cout<<endl;
}
main(){
int a[50];
srand((int)time(0));
int k = 0;
while(k < 50)
a[k++] = rand() % 100 + 1;
show(a, 50);
RadixSort(a, 50);
cout<<endl<<endl;
show(a, 50);
}
总结
提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了基数排序使用,而基数排序算是c++中较难的排序