c++ - 此排序数组代码导致最后一个元素消失

标签 c++ arrays sorting

所以,我试着先用输入做一个数组,然后把它从小到大排序,然后显示数组进行监控。

所以我想出了这段代码:

#include <iostream>
using namespace std;

void pancakeSort(int sortArray[], int sortSize);

int main()
{
    // Input The Array Element Value
    int pancake[10];
    for(int i=0; i<10; i++)
    {
        cout << "Person " << i+1 << " eat pancakes = ";
        cin >> pancake[i];

}

// call pancake sorting function
pancakeSort(pancake, 10);

}



void pancakeSort(int sortArray[], int sortSize)
    {
        int length = 10;
        int temp;
        int stop = 10;

    // this is where the array get sorting out from smallest to biggest number
    for(int counter = length-1; counter>=0; counter--)
    {
        for(int j=0; j<stop; j++)
        {
            if(sortArray[j]>sortArray[j+1])
            {
                temp = sortArray[j+1];
                sortArray[j+1] = sortArray[j];
                sortArray[j]=temp;
            }

        }

        stop--;
    }



    // after that, the array get display here
    for(int x=0; x<sortSize; x++)
    {
        cout << sortArray[x] << " ";
    }


}

但是输出很奇怪: enter image description here

函数成功地对数组进行了从小到大的排序,
但是有两件奇怪的事情:
1. 最大的值元素(我输入的是96,整理后是第10个元素),从显示中消失。
2. 由于某种原因,有一个值 10 ,我没有在数组中输入它。

那么,发生了什么事?

最佳答案

在循环中

for(int j=0; j<stop; j++)
{
    if(sortArray[j]>sortArray[j+1])
    {
        temp = sortArray[j+1];
        sortArray[j+1] = sortArray[j];
        sortArray[j]=temp;
    }
}

stop是数组的长度,您正在遍历 j = 0 to stop - 1 的值.当j达到 stop - 1 , 下一个元素是 j+1变成 stop (在这种情况下为 10)。但是由于你的数组长度为 10,sortArray[10]不是数组的一部分,而是指内存中通常是垃圾值的其他对象。在这种情况下,垃圾值是 10。当你交换 sortArray[10] and sortArray[9] ,垃圾值成为数组的一部分,索引 9 处的值离开数组。这种情况一直持续到外循环结束。

最终结果是,除非垃圾值<数组中的最大元素,否则垃圾值被压入数组,数组的最大值放在sortArray[10]处。这不是数组的一部分。如果垃圾值大于数组的所有值,它将在 sortArray[10] 处找到这又不是数组的一部分,您的代码将返回所需的结果。

本质上,您正在做的是为函数提供一个包含 10 个(或 stop)个元素的数组,但该函数实际上使用的是一个包含 11 个(或 stop + 1)个元素的数组,最后一个元素是垃圾值(value)。简单的解决方法是将循环的条件更改为 j < stop - 1 .

请注意,如果您使用托管(或相对更高级别的)语言(如 Java 或 C#)编写此代码,它会引发 IndexOutOfBoundsException .

关于c++ - 此排序数组代码导致最后一个元素消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34990406/

相关文章:

c++ - 字符串中最长连续字符的长度

c - 将一维数组插入 C 中的二维数组

c++ - 二元归并排序和自然归并排序

c - 为什么这个结构赋值数组不编译?

python - Pandas 'bool object is not callable'

c++ - 意外的段错误

c++ - 在编译时检查字符的唯一性

sorting - Elasticsearch.Net用NEST计算自定义文档项目得分

c++ - 如何对多映射中的键和值进行排序?

c++ - 这里调用了哪个构造函数?