我通过引用写了一个简单的排序代码。这里我传递一个数组来运行,然后执行排序操作。在传递数组后,我按照用户输入的方式打印整个数组,然后执行排序操作(按降序排列)但排序后,当我打印排序的数组时,我得到一个输出,数组索引'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];
}
答案 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]。