前言
这里做个简单的桶排序,方便大家对排序有个清晰简单的入门。其操作主要依靠一维数组。
一、问题-思路
1、自定义数组长度,动态分配数组。
int* book = new int[maxNum];
2、使其数组全部置为0。 book[0]、book[1]……book[maxNum] 均为0。
3、输入所需排序的值。 比如输入值为98、56、24等,则book[98]、book[56]、book[24]由0变为1。
4、判断输出。 若book的值大于0,则代表该点数列的值存在,而数组本身是线性排序完毕的,这时我们只需简单的遍历输出,倒序和顺序都可。
二、源码
#include <iostream>
using namespace std;
int main()
{
cout << "请输入需排序的序列最大值:";
int maxNum = 0;
cin >> maxNum;
int* book = new int[maxNum];
for (int i = 0; i < maxNum; i++)
{
book[i] = 0;
}
cout << "请输入要排序的序列的长度:";
int length = 0;
cin >> length;
cout << "请输入要排序的序列值:" << endl;
int testNum = 0;
for (int i = 0; i < length; i++)
{
cout << "第" << i + 1 << "个值:";
cin >> testNum;
book[testNum]++;
}
cout << "从小到大排序:";
for (int i = 0; i < maxNum; i++)
{
for (int j = 1; j <= book[i]; j++)
{
cout << i << " ";
}
}
return 0;
}
三、结果
四、总结
很容易看出桶排序依靠数组进行排序十分便捷,但是其有一个很致命的缺点,那就是浪费空间。比如你需要对两个数字1、99,999进行排序,则所需要开辟的空间就是100,000呀。。。
|