快速排序问题中的交换语句不太明白,恳请大家指点迷津、、
程序代码:#include <stdio.h>
void main(){
int a[10];
printf("请输入10个数: \n");
for(int i=0;i<10;i++){
scanf("%d",&a[i]);
printf("\n");
}
void qsort(int v[],int left,int right);
qsort(a,0,9);
for(int i=0;i<10;i++){
printf("%d\n",a[i]);
}
}
void qsort(int v[],int left,int right){
int i,last;
void sweap(int v[],int i,int j);
if(left>=right) //判断是否只包含有两个元素
return ;
sweap(v,left,(left+right)/2);//交换中间元素和最左边元素
last=left;//将标志移至0处
for(i=left+1;i<=right;i++)
if(v[i]<v[left])
sweap(v,++last,i);
/*printf("v[last]的值是多少:\n");
printf("%d\n",v[last]);*/
sweap(v,left,last);
qsort(v,left,last-1);
qsort(v,last+1,right);
}
void sweap(int v[],int i,int j){
int temp;
temp=v[i];
v[i]=v[j];
v[j]=temp;
}
这个程序是没有问题的,可是这里有几个问题我实在想了半天没有弄明白,就是关于last的问题,我根据自己的理解注释了一点点,也不知道对不对,尤其是后面的两个交换语句弄的很是不清楚,sweap(v,++last,i);sweap(v,left,last);不太明白这两句语句到底作用是干什么的?希望各位能够帮忙看一下,试了好多方法,譬如把值打印出来看看,也还是没弄明白。恳请大家帮帮忙啊。









