快速排序(分治算法) const int n = 1e6 + 10; int a[N]; //a[]:待排序数组,L:排序数组的起始下标,R:排序数组的结束下标 void quick_sort(int a[],int L,int R){ if(l >= r){return;} //递归的终止条件 int x = a[l]; //选取排序的比较对象 int i = L - 1; //设置排序的左指针 int j = R + 1; //设置排序的右指针 while(i<j){ //只要左右指针没相遇就循环进行 do i++; while( a[i]<x ); //左指针向右寻找 do j--; while( a[j]>x ); //右指针向左寻找 if(i<j){swap(a[i],a[j]); } //如果找到了就交换两个位置的变量 } quick_sort(a,L,j); //递归左区间 quick_sort(a,j+1,R) //递归右区间 } int main(){ int n; int a[10010]; cin>>n; for(int i=0;i<n;i++){ cin>>a[i]; } quick(a,0,n-1); for(int i=0;i<n;i++){ cout<<a[i]<<” ”; } cout<<endl; }
算法学习——快速排序
猜你喜欢
转载自www.cnblogs.com/Flydoggie/p/12196165.html
今日推荐
周排行