【排序】基数排序(计数排序、桶排序)

在此对于桶排序做出两种方法:

一.简化版桶排序

代码例如以下:

<span style="font-size:18px;">/*简化版的桶排序*/

#include <stdio.h>
int main()
{
	int book[1001],i,j,t,n;
	for(i=0;i<=1000;i++)
	{
		book[i]=0;
	}
	scanf("%d",&n);//输入一个数n。表示接下来有n个数
	for(i=1;i<=n;i++)//循环读入n个数。并进行桶排序
	{
		scanf("%d",&t); //把每个数读到变量t中
		book[t]++; //进行计数,对编号为t的桶放一个小旗子
	}
	for(i=0;i<=1000;i++) //依次推断编号1000~0的桶
	{
		for(j=1;j<=book[i];j++) //出现了几次就将桶的编号打印几次
		{
			printf("%d ",i);
		}
		getchar();
	}
	getchar();
	return 0;
}</span>


二.完整版桶排序

基数排序(有MSD和LSD)

如今先实现最简单的基数排序。就是对数字仅仅有从小到大排序,没有类别之分。


基数排序的思想就是:先对个位数字进行排序,排序完毕之后,统计成堆
                                        接着对上面排好序的十位数字进行排序。排序完毕之后,再进行对排好序的百位数字排序,依次类推

函数加測试代码例如以下:

/*完整版桶排序*/
#include <iostream>
#include <list>
using namespace std;

#define RADIX 10

/**
 * 基树排序(有MSD和LSD)
 * 如今先实现最简单的基数排序,就是对数字仅仅有从小到大排序。没有类别之分
 * 基数排序的思想就是:
 * 先对个位数字进行排序。排序完毕之后。统计成堆
 * 接着对上面排好序的十位数字进行排序,排序完毕之后,再进行对
 * 排好序的百位数字排序,一次类推
*/

void RadixSort(int arr[],int n)
{
	for(int m = 0;m < RADIX;m++)                 //创建RADIX个链表   
	{
        //还是採用list作为桶
        list<int> *lists = new list<int>[RADIX];	
        for(int i = 0;i < n;i++)                 
		{
            int temp = arr[i];
			int loc = 1;
            for(int t = 1;t < m;t++)
			{
                loc *= 10;
            }
            lists[(temp/loc%10)].push_back(arr[i]);//数值同样的插入到等值链表中
        }
        int j = 0;                                 //合并RADIX个链表
        for(i = 0;i < 10;i++)
		{
			
            if(lists[i].size() != 0)
			{
                list<int>::iterator it = lists[i].begin();
				
                while(it != lists[i].end())
				{
                    arr[j] = *it;
                    it++;
                    j++;
                }
            }
        }
    }
}

void main()
{
	int arr[] = {278,109,63,930,589,184,505,269,8,83};
	for(int i = 0;i < sizeof(arr)/sizeof(int);++i)
	{
		cout<<arr[i]<<" ";
	}
	cout<<endl;
	RadixSort(arr,sizeof(arr)/sizeof(int));
	for(i = 0;i < sizeof(arr)/sizeof(int);++i)
	{
		cout<<arr[i]<<" ";
	}
	cout<<endl;
}


执行结果例如以下图:




十分期待大家对于我的批评和建议~谢谢大家

原文地址:https://www.cnblogs.com/slgkaifa/p/6820983.html