基数排序

基数排序

  基数排序:类似桶排,将元素通过整除合求余的方式计算存放位置,遍历排除为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