@[Sean_xzx](/user/546830) 这是标准的手写快排
```
void qsort(int l,int r)
{
double mid=a[(l+r)/2];
int i=l,j=r;
do{
while(a[i]<mid)i++;
while(a[j]>mid)j--;
if(i<=j)
{
swap(a[i],a[j]);
i++;
j--;
}
}while(i<=j);
if(l<j)
qsort(l,j);
if(i<r)
qsort(i,r);
}
```
by Cheng_666 @ 2022-09-28 22:56:49
@[Sean_xzx](/user/546830) 改掉几行细节应该就过了
by Cheng_666 @ 2022-09-28 22:58:31
@[Sean_xzx](/user/546830) 真的能把j分段用吗
by xs_siqi @ 2022-09-28 23:11:28
@[Sean_xzx](/user/546830) ~~真的是~~二分
```
qsort(l,j-1);
qsort(j+1,r)
```
by Cheng_666 @ 2022-09-28 23:26:34
@[xs_siqi](/user/401088) 这个不可以吗?
by XSean @ 2022-09-28 23:27:43
@[Sean_xzx](/user/546830) 可以是可以,但是绝对超时
by Cheng_666 @ 2022-09-28 23:35:08
@[cx341694241](/user/203172) 还是不行
```cpp
#include<bits/stdc++.h>
using namespace std;
//qsort();
int n,arr[1001];
void qsort(int l,int r){
if(l>=r) return;
int temp=arr[(l+r)/2];
int mid=(l+r)/2;
int i=l,j=r;
while(i<j){
while(arr[i]<temp) i++;
while(arr[j]>temp) j--;
if(i<j){
swap(arr[i],arr[j]);
}
// cout<<endl<<"temp:"<<temp<<" i:"<<i<<" j:"<<j<<endl;
// for(int i=1;i<=n;i++) cout<<arr[i]<<" ";
// cout<<endl;
}
qsort(l,j-1);
qsort(i+1,r);
}
int main(){
cin>>n;
for(int i=1;i<=n;i++) cin>>arr[i];
qsort(1,n);
for(int i=1;i<=n;i++) cout<<arr[i]<<" ";
return 0;
}
```
by XSean @ 2022-09-28 23:36:55
@[Sean_xzx](/user/546830) 这样才不会超时
```
qsort(l,j);
qsort(i,r);
```
by Cheng_666 @ 2022-09-28 23:36:59
@[cx341694241](/user/203172) 话说这是什么原理
by XSean @ 2022-09-28 23:41:15
@[Sean_xzx](/user/546830) 这是修改后的
```
#include<bits/stdc++.h>
using namespace std;
int n,arr[100000];
void qsort(int l,int r){
if(l>=r) return;
int temp=arr[(l+r)/2];
int mid=(l+r)/2;
int i=l,j=r;
while(i<=j){
while(arr[i]<temp) i++;
while(arr[j]>temp) j--;
if(i<=j){
swap(arr[i],arr[j]);
i++;
j--;
}
}
qsort(l,j);
qsort(i,r);
}
int main(){
cin>>n;
for(int i=1;i<=n;i++) cin>>arr[i];
qsort(1,n);
for(int i=1;i<=n;i++) cout<<arr[i]<<" ";
return 0;
}
```
by Cheng_666 @ 2022-09-28 23:41:35