码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2015-06-26 09:16:59      阅读:130      评论:0      收藏:0      [点我收藏+]

标签:数据结构   基数排序   桶排序   

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

一.简化版桶排序

代码如下:

<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;
}


运行结果如下图:

技术分享



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

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

标签:数据结构   基数排序   桶排序   

原文地址:http://blog.csdn.net/qaz3171210/article/details/46644437

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!