菜鸟问个程序问题

来源:百度知道 编辑:UC知道 时间:2024/06/07 08:40:47
#include<iostream>
using namespace std;
void swap(int & a,int & b)
{
int temp=a;
a=b;
b=temp;
}
int main()
{
int a[]={6,7,5,2,5,8};
int p=0,r=5;
int i = p, j = r+1;
int x=a[p];
cout<<"x="<<x<<endl;
while (true) {
while (a[++i] <x);
{
while (a[--j] >x);
{if (i >= j) break;
swap(a[i], a[j]);
cout<<"i="<<i<<"j="<<j<<endl;
}
}
}
a[p] = a[j];
a[j] = x;
for (int y=0;y<=5;y=y+1)
{cout<<a[y];}
return 0;
}
这是算法书上的快速排序的内容,我改了下。这里有个疑问:书上和计算机运行都表明第一次的swap是a[1]和a[4]。但我就不明白了:while (a[++i] <x); 第一次a[++i]不是a[1]=7>8吗?那么就不运行下面的语句,再做一次while (a[++i] <x)?这时候不是已经a[2]了吗?所以,为什么第一次是a[1]和a[4]交换啊?我表达的不太好,见谅啦~~
“++”,“—”似乎是没问题的,因为我试过在循

a[i]的第一项是a[0],第一次a[++i]不是a[1]而是a[0],当比较a[0]和8的大小后、再运行[++i],此次i才变成1。简单地说就是[++i]是先进行i的运算,再运行i+1.此例是[i++]和[++i]的区别。前者是先算+1,再其他。后者是先其他,再将i+1
cout<<a[++i]<<a[--j],你换成{cout<<a[++i]&&a[++i]<<a[--j]},你的插入的不正确