快速排序:
思路:主要运用递归函数(在函数中调用自己)。将输入的一串数组分成若干小分设置哨兵(key),然后运用到一点点2分思路,找到第一个比哨兵编号小却比其大的数和第一个比哨兵编号大却比其小的数,将他们用swap进行交换。这个步骤会持续很多次,直到没有为止。每个qsort子函数亦是如此,分函数的时候注意,要将哨兵前和哨兵后的分成两个。总的来说运算量更少了,比归并排序快一点。具体内容请看下面代码。
代码:
//制作不易,麻烦给个赞。
#include<bits/stdc++.h>
using namespace std;
int a[100002];
void qsort(int l,int r)
{
int key=a[(l+r)/2];
int i=l,j=r;
while(i<=j)
{
while(a[i]<key)
i++;//查找第一个比哨兵编号小却比其大的数
while(a[j]>key)
j--;//查找第一个比哨兵编号大却比其小的数
if(i<=j)
{
swap(a[i],a[j]);//交换
i++;
j--;
}
}
if(l<j) qsort(l,j);//不断拆分
if(i<r) qsort(i,r);//不断拆分
}
int main ()//主程序
{
int n;
cin>>n;
for(int i=1;i<=n;i++)
cin>>a[i];
qsort(1,n);
for(int i=1;i<=n;i++)
cout<<a[i]<<endl;
return 0;
}
//感谢大家支持!!!