题目链接:https://www.luogu.org/problemnew/show/P1177
参考程序:
#include<iostream>
#include<algorithm>
#include<cstdio>
using namespace std;
const int maxn=100000+10;
int A[maxn],n;
/*
void quickSort(int L,int R){
int i=L,j=R;
while(i<=j){
int mid=(i+j)/2;
while(A[i]<A[mid]) i++;
while(A[j]>=A[mid]) j--;
if(i<=j){
swap(A[i++],A[j--]);
}
}
if(L<j) quickSort(L,j);
if(i<R) quickSort(i,R);
}
*/
void quickSort(int L,int R)
{
int mid = A[(L+R)/2];
int i=L,j=R;
while(i<=j)
{
while(A[i]<mid) i++;
while(A[j]>mid) j--;
if(i<=j) swap(A[i++],A[j--]);
}
if(L<j) quickSort(L,j);
if(i<R) quickSort(i,R);
}
int main(void){
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d",&A[i]);
quickSort(1,n);
for(int i=1;i<=n;i++){
if(i!=n) printf("%d ",A[i]);
else printf("%d\n",A[i]);
}
return 0;
}
这里注释的地方细节的地方一定出了错误,但是不知道哪里错了错误?检查一下?
这里的mid是作为一个中间值,把[L,R]中的数据分成两个部分,自己处理的时候,每一次都修改了mid的值,这是一个非常低级的错误。
![](https://img.haomeiwen.com/i14193278/860ac6f81df65e3b.png)
这是修改之后的函数,但是还是有错误的!!!
再看一眼正确的方法:
![](https://img.haomeiwen.com/i14193278/31393bb8ecb9e5ec.png)
这里有错误
![](https://img.haomeiwen.com/i14193278/6f5d72b43f266567.png)
网友评论