所用材料:數組,temp基準數 left左哨兵 right右哨兵
應用場景:有時間限制的排序題
快速排序之所以比較快,是因爲相比冒泡排序,每次交換是跳躍式的。
方法:每次排序的時候設置一個基準點,將小於等於基準點的數全部放到基準的左邊,將大於等於基準點的數全部放到基準點的右邊。
#include<cstdio>
#include<iostream>
using namespace std;
int a[101],n;
void quicksort(int left,int right)
{
int i,j,temp;
if(left>right)
return;
temp=a[left];
i=left;
j=right;
while(i!=j)
{
while(a[j]>=temp&&i<j)//找到比基準數小的
j--;
while(a[i]<=temp&&i<j)//找到比基準數大的
i++;
if(i<j)//當兩個哨兵沒有碰頭時
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
//當兩個哨兵碰頭時
a[left]=a[i];
a[i]=temp;
quicksort(left,i-1);//繼續處理左邊的
quicksort(i+1,rigt); //繼續處理右邊的
return ;
}
int main(void)
{
int i,j;
cin>>n;
for(i=1;i<=n;i++)
cin>>a[i];
quicksort(1,n);
for(i=1;i<=n;i++)
cout<<a[i];
return 0;
}