首页 > 解决方案 > 排序数组超出大小

问题描述

我编写了这个程序来根据偶数下标按升序对一对数字进行排序。例如; 排序后“1,4,15,3”将是“15,3,1,4”。排序工作正常,但我遇到的问题是内部循环正在比较超出数组大小的元素。它正在与随机数进行比较。我不知道循环应该运行的确切时间(我尝试过 size - 3)。请帮我解决这个错误。这是代码。

#include <iostream>

void ssort(int arr[], int arrSize)
{
    int j, k;
    bool flag;
    do
    {
        flag = false;   
        for (int i = 0; i <arrSize; i++)  //Runs 10 times
        {
            if (arr[i+1] > arr[i+3])      //compare the 2nd element with 4th
            {
                j = arr[i+2];  //j holds 3rd element
                k = arr[i+3];    //k holds 4th element

                arr[i+2] = arr[i];   //3rd element is now 1st element
                arr[i+3] = arr[i+1];    //fourth element is now 2nd element

                arr[i] = j;    //1st is now 3rd element
                arr[i+1] = k;  //2nd is now fourth element

                flag = true;
            }
        }
    }
    while (flag);

}
int main()
{

    int arr[10] = {1,5,2,15,10,4,15,23,16,15};
    std::cout <<"Unsorted array \n";
    for (int i: arr)
    {
        std::cout <<i <<" ";
    }
    std::cout <<"\n";
    ssort(arr,10);

    std::cout <<"Sorted \n";
    for (int i: arr)
    {
        std::cout <<i <<" ";     
    }
    return 0;
}


标签: c++arrayssorting

解决方案


始终牢记检查角落案例。当您向索引添加常量值时,添加不应跨越数组大小-1。添加检查并处理极端情况。


推荐阅读