首页 > 代码库 > 基数排序
基数排序
在箱子排序中,虽然时间复制度只有(n),但如果其箱子序列较大的话将会导致程序的空间复杂度较大,所以对于对于属性值跨度比较大的序列可以采用基数排序法。
概述:具体的做法是并不直接对这些数排序,而是采用一些基数来分解这些数,例如:用基数10来分解3725可以得到3、7、2和5。而利用60来分解可以得到1、2、5。然后再根据每一位基数从低位到高位对原数据进
行排序,即若最长的基数有m位,直到共进行了m次排序后则基数排序完成。
特点:可以在o(n)时间内对0到 -1之间的n个整数进行排序,其中c为常数。
示例:
问题一:对下面的序列进行排序:
{216,521,425,116,91,515,124,12434,96,24,5}
问题二:对下面的序列进行排序:
{1123,1657,88865,22,546,9908,111111,78786,22,515,515,9908,414,33,4,90,8765,12,543,66,99}
示例实现代码及结果如下:
#include<iostream> #include<deque> #include<algorithm> #include<iterator> #include<vector> #include<map> using namespace std; //将10进制数data分解成n进制数的序列 deque<int> trans(int data,int n) { deque<int> deq; for ( ; 0!=data ; ) { deq.push_front(data%n); data = http://www.mamicode.com/(data-data%n)/n;>
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。