1 条题解
-
0
Guest
-
1
介绍一种二分快排的方法``
void quicksort(int a[],int l,int r) { if(l>=r) return;//递归边界,检测左右两端点是否已排完 int i=l-1,j=r+1,flag=a[l+r>>1];//设定哨兵flag,其中l+r>>1=(l+r)/2 while(i<j) { do i++;while(a[i]<flag);//从左到右查找比哨兵大的数 do j--;while(a[j]>flag);//从右到左查找比哨兵小的数 if(i<j) swap(a[i],a[j]);//找到数之后交换他们的位置 } quicksort(a,l,j);//递归排序左边部分 quicksort(a,j+1,r);//递归右边 }
调用方法
int n,a[11451]={0}; int main() { scanf("%d",&n); for(int i=0;i<n;i++) { scanf("%d",&a[i]); } quicksort(a,0,n-1); for(int j=0;j<n;j++) { printf("%d ",a[j]); } }
信息
- ID
- 666
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 9
- 标签
- 递交数
- 14
- 已通过
- 5
- 上传者