使用list实现了排序的中比较简单的插入排序,箱子排序和基数排序,其中,箱子排序和基树排序只能用于数的排序,所以限制还是蛮大的,箱子排序在实际使用中基本上不使用,箱子排序是基数排序的基础,基数排序有MSD和LSD,MSD也就是从最高位开始向最低位排序,LSD也就是从最低位向最高位排序。
下面附上我的实现代码:
#include <iostream>
#include <list>
using namespace std;
void selecrSort(int test[],int size);
void bulletSort(int test[],int size);
void radixSort(int test[],int size,int wei);
int main() {
int test[]= {2,1,4,3};
radixSort(test,4,1);
for(int m = 0;m < 4;m++){
cout << test[m] << " ";
}
cout << endl;
return 0;
}
void selecrSort(int test[],int size){
if(size == 1)
return;
int i = 1;
for(i = 1;i < size;i++){
if(test[i-1] > test[i]){
int temp = test[i];
int j = i-1;
while(j>=0 && test[j] >= temp){
test[j+1] = test[j];
j--;
}
test[j+1] = temp;
}
}
}
int Max(int test[],int size){
int i = 0;
int max = test[0];
for(i = 1;i < size;i++){
if(test[i] > max)
max = test[i];
}
return max;
}
int Min(int test[],int size){
int i = 0;
int min = test[0];
for(i = 1;i < size;i++){
if(test[i] < min)
min = test[i];
}
return min;
}
void bulletSort(int test[],int size){
int max = Max(test,size);
int min = Min(test,size);
list<int> *lists = new list<int>[max-min+1]();
int i = 0;
for(i = 0;i < size;i++){
lists[test[i]-min].push_back(test[i]);
}
for(i = 0;i < max-min+1;i++){
list<int>::iterator it = lists[i].begin();
cout << *it << " ";
}
}
void radixSort(int test[],int size,int wei){
int i = 0;
int m = 0;
for(m = 1;m <= wei;m++){
list<int> *lists = new list<int>[10];
for(i = 0;i < size;i++){
int temp = test[i];
int loc = 1;
int tt = 1;
for(tt = 1;tt < m;tt++){
loc *= 10;
}
lists[(temp/loc%10)].push_back(test[i]);
}
int j = 0;
for(i = 0;i < 10;i++){
if(lists[i].size() != 0){
list<int>::iterator it = lists[i].begin();
while(it != lists[i].end()){
test[j] = *it;
it++;
j++;
}
}
}
}
}
void swap(int &a,int &b){
int temp = a;
a = b;
b = temp;
}
<script type="text/javascript">
$(function () {
$('pre.prettyprint code').each(function () {
var lines = $(this).text().split('\n').length;
var $numbering = $('<ul/>').addClass('pre-numbering').hide();
$(this).addClass('has-numbering').parent().append($numbering);
for (i = 1; i <= lines; i++) {
$numbering.append($('<li/>').text(i));
};
$numbering.fadeIn(1700);
});
});
</script>
版权声明:本文为博主原创文章,未经博主允许不得转载。
分享到:
相关推荐
用STl实现基数排序算法 功能强大非常适合数据结构课程设计
随便写的一个基数排序算法,很简单,用STL实现
详细解说STL排序 详细解说STL排序 详细解说STL排序
内部排序合集(插入、希尔、起泡、快速、选择、堆、归并和基数排序) 这是我在我们期末的时候写的一些内部排序的例子。因为我们的数据结构考试的范围就限定在内部排序上,所以我没有什么办法,只好对自己埋头苦干就...
stl练习题,掌握简单stl 容器类用法。 代码清晰易懂,里面使用了部分递归函数
用STL实现排序,里面用到Set , vector 等,程序简短,高效。
17循环链表 18双项链表 19链式栈 20链式队列 21STL_list类 22基数排序 23属 24二叉树 25二叉树找数 26红黑树 27红黑树_0 28红黑树_1 29红黑树_2 30红黑树_3 31红黑树_4 32红黑树_5 33红黑树_6 34堆 35堆排序 36...
STL中的set和map都是自动排序的,但是如何修改其排序准则呢?本文档给出了修改思路和具体的实现代码。对于STL编程爱好者而言,实在是不可多得的好资料啊。
一个定义了整数排序的工程,相比课本上的要更加高效和简洁
STL对于C++编程者而言,相信都非常喜爱吧。但是其中的排序准则,你亲自试过修改吗?如何修改?请参考本文档的思路和实现过程吧。
源码之前了无秘密,你将看到vector的实现、list的实现、heap的实现、deque的实现、Red Black tree的实现、hash table的实现、set/map的实现;你将看到各种算法(排序、查找、排列组合、数据移动与复制技术)的实现;你...
从根本上说,STL是一些“容器”的集合,这些“容器”有list,vector,set,map等,STL也是算法和其他一些组件的集合。这里的“容器”和算法的集合指的是世界上很多聪明人很多年的杰作。STL的目的是标准化组件,这样就...
C++ STL实现包含常用stl模板的手动实现仅供参考
详细解说 STL 排序,可以下载看看。了解多点stl排序问题
C++11中有无序map即: unordered_map 可以不自动排序, 那么C++98中只有map 如何避免自动排序。
stl 练习 vector map iterator操作。
STL中的排序算法一览
使用VC++控制台应用程序编写,测试了:vector对象的排序,对象中的大小无序,有重复。
南阳理工学院stl练习场全部ac代码!
1)比较范围:直接插入排序、冒泡法排序、简单选择排序、快速排序1(自己实现)、快速排序2(调用STL)、归并排序。 2)比较指标:a)关键字操作次数(比较次数和移动次数之和),b)排序时间。每个指标采用多次重复...