算法思路:每次从待排序序列中选择一个元素作为枢纽元素(通常为待排序数列第一个元素),然后设置一个左指针和一个右指针,当右指针指向的元素大于或等于枢纽元素时,右指针左移(若每次选取第一个元素为枢纽元素,则右指针先动),直到遇到一个比枢纽元素小的元素后停下,然后让左指针右移,直到遇到一个比枢纽元素大的元素后停下,若左右指针未相遇,则交换左右指针指向的元素,然后继续执行以上步骤直至左右指针相遇,最后将枢纽元素与左右指针相遇后指向的元素交换,将枢纽元素放在其最终位置,此称为完成了一趟快速排序。之后递归地对枢纽元素两边的元素序列分别进行快速排序直至整个序列有序。
#include<iostream>
using namespace std;
void swap(int &a,int &b){ //定义交换函数
int t;
t=a;
a=b;
b=t;
}
void QuickSort(int *a,int begin,int end){ //定义快速排序函数
if(begin>=end) //当没有元素或只有一个元素时,递归终止
return;
int i=begin,j=end,t=a[begin];
while(i<j){
while(i<j&&a[j]>=t)
j--;
while(i<j&&a[i]<=t)
i++;
swap(a[i],a[j]);
}
swap(a[begin],a[i]); //将枢纽元素移至最终位置
QuickSort(a,begin,i-1); //递归对枢纽左边元素进行快速排序
QuickSort(a,i+1,end); //递归对枢纽右边元素进行快速排序
}
int main(){
int a[101],n;
cout<<"请输入待排序元素个数"<<endl;
cin>>n;
cout<<"请输入待排序元素"<<endl;
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]<<' ';
return 0;
}