南昌理工ACM集训队
快排的思想:
1:任取一个数作为基数,将其他数与其比较,将大于基数的放在右边,小于的放在左边。
2:此时基数将数组分为两部分,然后从左部分再重复步骤1。
3:最后输出即可。
图解如下:
模板代码如下;
#include<iostream>
using namespace std;
const int N=100001;
int a[N];
void quicksort(int a[],int left,int right)
{
if(left>=right) return;
int x=a[(right+left)/2],i=left-1,j=right+1;//选定一个基数
while(i<j)
{
do i++; while(a[i]<x);//从左开始比较
do j--; while(a[j]>x);// 从右开始比较
if(i<j) swap(a[i],a[j]);//完成上述两步后进行交换,将大于基数的放在左边,小于的放在右边
}
quicksort(a,left,j);//再次调用此函数 (左半部分) 必须从左开始
quicksort(a,j+1,right);//同上 (右半部分)
}
int main()
{
int n;
cin>> n;
for(int i=0;i<n;i++)
cin>> a[i];
quicksort(a,0,n-1);
for(int i=0;i<n;i++)
cout<< a[i] <<endl;
return 0;
}
虽然快排可以从函数库里使用并不需要自己再写,但是其中的逻辑与数学思想才是其价值所在!
初次写博客,如果有什么不足,还请见谅。