/*太久没有写c++语法都快忘了*/
#include<iostream>
using namespace std;
int partation(int a[],int p,int r){
int head=p;
int tail=r;
int biao=a[p];
while (true)
{
while(head<=r&&a[head]<=biao)head++;//从前开始找,找到大于基准的就停下,因
//大于基准它应该在后面
while(a[tail]>biao&&tail>p)tail--;//从后开始找,找到小于基准的停下,这个值
//该放在基准前面
if (head>=tail)//说明找到了基准的位置
{
break;
}
else {
int temp=a[head];
a[head]=a[tail];
a[tail]=temp;}//将找到的值放在合适位置
}
return tail;
}
void quiksort(int a[],int p,int r){
if (p<r){
int q=partation(a, p, r);
int temp=0;
temp=a[q];
a[q]=a[p];
a[p]=temp;//交换是为了保持问题的性质
quiksort(a,p,q-1);
quiksort(a,q+1,r);
}
}
int main()
{
int a[8]={12,13,30,99,1,78,3,56};
quiksort(a,0,7);
for (int i=0;i<sizeof(a)/sizeof(a[0]);i++)
{
cout<<a[i]<<endl;
}
return 0;
}
快速算法主要体现分治的思想。
分治思想设计的一般原则:原问题划分为子问题,子问题求解,综合子问题得出原问题的解。一般来说在设计分治算法时很容易在划分子问题时划分得不好(没有保持子问题与原问题性质相同),或者合并子问题时出错,