快速排序
题目:MIKU
这道题实在太强了,各种排序轮番过,连STL都可以
理论:百度百科
但是,我还是要挂上真正的快速排序(我知道他有很多实现方式)
/* 快速排序是种很重要的算法 即使我也不知道它哪里比归并强 */ #include<iostream> using namespace std; int a[1000000]; void quicks(int l,int r) { int i=l,j=r;//左右下标 int mid=a[(i+j)/2];//关键字!!注意不是下标 //虽然说用下标也行 //我习惯取中间,不过好像都行 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(i<r) quicks(i,r);//没有归为有序的部分接着找 if(j>l) quicks(l,j);// 我也解释不了更多了 } int main() { int n; cin>>n; for(int i=1;i<=n ;++i) { cin>>a[i]; } quicks(1,n); for(int i=1;i<=n;++i) { cout<<a[i]<<" "; } }
就是这样了。
2019.3.9
THAT'S ALL