#include <iostream>
using namespace std;
int array1[1000] = { 0 };
int array10[1000] = { 0 };
int array100[1000] = { 0 };
int array1000[1000] = { 0 };
int arr[1000];
void geshu(int n)
{
for (int i = 0; i < n; i++)
{
cin >> arr[i];
}
}//确定数组长度和元素个数
void fz(int arr[],int n)
{
int a = 0;
int b = 0;
int c = 0;
int d = 0;
for (int i = 0; i < n; i++)
{
if (arr[i] < 10)
{
array1[a] = arr[i];
a++;
continue;
}
if (arr[i] >= 10 && arr[i] <= 99)
{
array10[b] = arr[i];
b++;
continue;
}
if (arr[i] >= 100 && arr[i] <= 999)
{
array100[c] = arr[i];
c++;
continue;
}
if (arr[i] >= 1000 && arr[i] <= 9999)
{
array1000[d] = arr[i];
d++;
continue;
}
}
}//将各种长度的元素分配到对应的桶
void bj(int arr[],int n)
{
int temp;
for (int i = 0; i < n - 1; i++)
{
for (int j = 0; j < n - i - 1; j++)
{
if (arr[j] > arr[j + 1])
{
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}//依次比较桶内元素大小并排序
void px(int arr[], int arr1[], int arr2[], int arr3[], int arr4[],int n)
{
int a = 0;
int b = 0;
int c = 0;
int d = 0;
for (int i = 0; i < n; i++)
{
if (arr1[a] != 0)
{
arr[i] = arr1[a];
a++;
}
else if (arr1[a] == 0 && arr2[b] != 0)
{
arr[i] = arr2[b];
b++;
}
else if (arr1[a] == 0 && arr2[b] == 0 && arr3[c] != 0)
{
arr[i] = arr3[c];
c++;
}
else if (arr1[a] == 0 && arr2[b] == 0 && arr3[c] == 0 && arr4[d] != 0)
{
arr[i] = arr4[d];
d++;
}
else
break;
}
}//将不同桶的元素重新排列到原先数组中
int main()
{
int n = 0;
cout << "请输入你的数组长度,同时输入所有元素" << endl;
cin >> n;
geshu(n);
fz(arr, n);
bj(array1, n);
bj(array10, n);
bj(array100, n);
bj(array1000, n);
px(arr, array1, array10, array100, array1000, n);
for (int i = 0; i < n; i++)
{
cout << arr[i] << endl;
}
}
这是我关于桶排序的一段代码,各个函数的注释已经写明,经过测试我所有的函数应该都是没有问题的,但是每次调试的时候数组只含有个位数或者十位数或者百位数的时候能够正常排序并输出,但是只要一个数组含有十位数和个位数或者百位数后,原来怎么输入的就怎么输出,实现不了排序的效果。同时在拆分输出每个桶里的元素后所有的元素都是从后往前排,前面的都是0补足,离开这个程序将所有的函数调用到别的空项目内是能做到正常排序的。但是所有的合在一起就没办法正常输出,这是为什么。