题目:
这道题实在太强了,各种排序轮番过,连STL都可以
理论:
但是,我还是要挂上真正的快速排序(我知道他有很多实现方式)
/*快速排序是种很重要的算法即使我也不知道它哪里比归并强 */#includeusing 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) j--;//在右半边找比关键字小的 if(i<=j)//如果这俩撞上了,或相等 { swap(a[i],a[j]);//交换 i++; j--;//接着找 } }while(i<=j);//这个点,一本通上讲必须有小于等于,但是我亲测光小于也能过 if(i 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< <<" "; }}
就是这样了。
2019.3.9
THAT'S ALL