基数排序
基数排序
基数排序:类似桶排,将元素通过整除合求余的方式计算存放位置,遍历排除为0的元素,得到的就是有序集合.代码
#include <stdio.h>
#include <stdlib.h>
//数组的长度
#define N 10
//输出
void show_arr(int *p, int len)
{
for (int i = 0; i < len; i++)
{
printf("%4d", p[i]);
}
printf("\n");
}
//基数排序:类似桶排,将元素通过整除合求余的方式计算存放位置,遍历排除为0的元素,得到的就是有序集合
//91/10 整除
//91%10 求余
void radix_sort(int *p, int len)
{
int temp_arr[N][N] = { 0 };
for (int i = 0; i < len; i++)
{
//主要在这里,计算存放位置
temp_arr[p[i] / 10][p[i] % 10] = p[i];
}
int index = 0;
for (int i = 0; i < len; i++)
{
for (int j = 0; j < len; j++)
{
if (temp_arr[i][j] != 0)
{
p[index] = temp_arr[i][j];
index++;
}
}
}
}
int main(int argc, char *argv[])
{
int arr[N] = { 91,93,78,68,15,13,12,16,98,4 };
printf("排序前:");
show_arr(arr, 10);
radix_sort(arr, 10);
printf("排序后:");
show_arr(arr, 10);
system("pause");
return 0;
}
效果

秋风
2016-08-21