与独 2022-12-19 14:15 采纳率: 92.3%
浏览 20
已结题

关于桶排序无法正常输出的问题


#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补足,离开这个程序将所有的函数调用到别的空项目内是能做到正常排序的。但是所有的合在一起就没办法正常输出,这是为什么。

  • 写回答

2条回答 默认 最新

  • ShowMeAI 2022-12-19 14:42
    关注

    你的代码是在实现桶排序的过程,但是你在打印输出结果时没有使用循环打印整个数组,所以只会输出第一个元素的值。

    你需要在 main 函数的最后加入一个循环,打印整个数组的值。例如:

    for (int i = 0; i < n; i++)
    {
    cout << arr[i] << " ";
    }
    cout << endl;
    

    这样就可以正常输出整个数组了。

    另外,你也可以使用 C++ 的输入输出流库中的 std::copy 函数来简化打印数组的过程,例如:

    #include <algorithm>
    
    // ...
    
    std::copy(std::begin(arr), std::end(arr), std::ostream_iterator<int>(std::cout, " "));
    std::cout << std::endl;
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 12月28日
  • 已采纳回答 12月20日
  • 创建了问题 12月19日

悬赏问题

  • ¥15 在获取boss直聘的聊天的时候只能获取到前40条聊天数据
  • ¥20 关于URL获取的参数,无法执行二选一查询
  • ¥15 液位控制,当液位超过高限时常开触点59闭合,直到液位低于低限时,断开
  • ¥15 marlin编译错误,如何解决?
  • ¥15 有偿四位数,节约算法和扫描算法
  • ¥15 VUE项目怎么运行,系统打不开
  • ¥50 pointpillars等目标检测算法怎么融合注意力机制
  • ¥20 Vs code Mac系统 PHP Debug调试环境配置
  • ¥60 大一项目课,微信小程序
  • ¥15 求视频摘要youtube和ovp数据集