【发布时间】:2017-12-25 20:23:52
【问题描述】:
我正在做作业,但不知道为什么冒泡排序不起作用。由于某些未知原因,它正在使数组的第一个元素为零。
#include <iostream>
using namespace std;
int main()
{
int *arr,s;
cout<<"Enter the quantity of numbers ";
cin>>s;
arr=new int[s];
for(int i=0;i<s;i++)
{
cout<<"Enter number "<<i+1<<" ";
cin>>*(arr+i);
}
int temp;
for(int j=0;j<s;j++)
{
for(int k=0;k<(s-j);k++)
{
if(*(arr+k)>*(arr+k+1))
{
temp=*(arr+k);
*(arr+k)=*(arr+k+1);
*(arr+k+1)=temp;
}
}
}
for(int x=0;x<s;x++)
{
cout<<*(arr+x)<<"\t";
}
cout<<endl;
return 0;
}
输出
Enter the quantity of numbers 5
Enter number 1 4
Enter number 2 33
Enter number 3 22
Enter number 4 1
Enter number 5 3
0 1 3 4 22
我不知道为什么第一个元素变为零。如果我在没有冒泡排序循环的情况下运行它,它会完美运行,但不要使用这些循环。
【问题讨论】:
-
请注意,缺少的元素不是最小的(
1),而是最大的(33)。这意味着已排序数组中的每个元素都向右移动了一个。这应该可以帮助您调试。 -
最后一个元素也被忽略了
-
@Junaid Khalid 这里 if(*(arr+k)>*(arr+k+1)) 当 j 等于 0 并且 k 等于s - 1.
-
由于一些未知原因 -- 原因是已知的。那么你想知道如何找出原因吗?您发现的方法是使用编译器工具集附带的调试器并单步执行您的代码,仔细查看数组、索引以及正在访问的索引。
-
k 被初始化为零并且没有递减,那么 k 如何等于 -1?
标签: c++ arrays sorting for-loop bubble-sort