手写快排

快排思想(从小到大排):

   根据冒泡排序,时间复杂度实在过高,我们不妨这么想,比如随机说一组数:

   5 8 9 6 3 4;

   我们从一(序号)开始,如若a[i]>a[j],则交换二者的值,没有的话则跳过,具体过程如下:

  ①3 8 9 6 5 4
  ②3 6 9 8 5 4
  ③3 5 9 8 6 4
  ④3 4 9 8 6 5
  ⑤3 4 8 9 6 5
  ⑥3 4 6 9 8 5
  ⑦3 4 5 9 8 6
  ⑧3 4 5 8 9 6
  ⑨3 4 5 6 9 8
  ⑩3 4 5 6 8 9

  代码如下:

#include<bits/stdc++.h>
using namespace std;
int n;
int ans;
int a[10200];
int main()
{
  cin>>n;
  for(int i=1;i<=n;i++)
  cin>>a[i];
  for(int i=1;i<=n;i++)
    for(int j=i+1;j<=n;j++)
    {
      if(a[i]>a[j]) swap(a[i],a[j]),ans++;else continue;
      for(int i=1;i<=n;i++) cout<<a[i]<<' ';//每次交换后输出
      cout<<endl; //
    }
   for(int i=1;i<=n;i++)//
   cout<<a[i]<<' ';//
  cout<<ans;//输出次数,和a[i];
  return 0;
}

❀完结撒花❀

 

posted @ 2021-01-14 18:33  上仙  阅读(95)  评论(0编辑  收藏  举报