cpp通过引用传递

时间:2015-10-08 05:45:47

标签: c++ arrays sorting

我通过引用写了一个简单的排序代码。这里我传递一个数组来运行,然后执行排序操作。在传递数组后,我按照用户输入的方式打印整个数组,然后执行排序操作(按降序排列)但排序后,当我打印排序的数组时,我得到一个输出,数组索引'0'包含值'41' 。如果我输入小于'41'的数字,则排序的数组显示为'41',然后排序的数字显示为排序的方式。请解释为什么我得到这样的输出。

#include<iostream>
using namespace std;
int sort_array(int *p);

int main() {
    int arr[10];
    for (int i=0; i<10; i++) {
        cout << "enter " << (i+1) << " value:";
        cin >> arr[i];
        cout << "\n";
    }

    sort_array(arr);
    return 0;
}

int sort_array(int *p) {
    int c=0;
    for (int i=0; i<10; i++) {
        cout << p[i];
        cout << "\n";
    }
    cout << "arr:"<<p[0];
    cout<<"\n";

    for (int i=0; i<10; i++) {
        for (int j=0; j<10; j++) {
            if (p[j] < p[j+1]) {
            c=p[j];
            p[j]=p[j+1];
            p[j+1]=c;
        }
    }

    cout << "\n";
    for (int i=0; i<10; i++) {
        cout << p[i];
        cout << "\n";
    }
    cout << p[0];
}

3 个答案:

答案 0 :(得分:1)

您似乎试图在sort_array()中对阵列进行冒泡排序,但逻辑错误。请尝试使用此代码:

int sort_array(int *p) {
    int c=0;

    for (int i=0; i<10; i++) {
        cout << p[i];
        cout << "\n";
    }
    cout << "arr:" << p[0];
    cout << "\n";

    for (int i=0; i < 10; i++) {
        for (int j=1; j < (10-i); j++) {
            if (p[j-1] > p[j]) {
                c = p[j-1];
                p[j-1] = p[j];
                p[j] = c;
            }
        }
    }

    cout << "\n";
    for (int i=0; i<10; i++) {
        cout << p[i];
        cout << "\n";
    }
    cout<<p[0];
}

答案 1 :(得分:0)

问题在于你的排序。 j是从0到9,而当您p[j+1]时访问j = 9时,p[10]超出了数组边界。

因此,请将以下部分修复为正确的排序。

for(int i=0;i<10;i++)
{
    for(int j=0;j<10;j++)
    {
        if(p[j]<p[j+1])
        {
            c=p[j];
            p[j]=p[j+1];
            p[j+1]=c;
       }
    }
}

澄清:上面的代码是发布的原始代码中有问题的部分。这不是固定的排序。这是要修复的部分。

答案 2 :(得分:0)

for(int i=0;i<10;i++)
{
    for(int j=0;j<9;j++)
    {
        if(p[j]<p[j+1])
        {
            c=p[j];
            p[j]=p[j+1];
            p[j+1]=c;
        }
    }
}

一旦我改变了内循环的限制,排序工作正常。问题是访问数组索引[10],但我已将其声明为index [9]。