快速排序 (分治)
void Swap(int &a,int &b) //位运算交换两数
{
if(a!=b)
{
a^=b; //a=(a^b)
b^=a; //b=b^a=b^(a^b)=0^a=a
a^=b; //a=a^b=(a^b)^a=0^b=b
}
}
void QuickSort(int a[],int s,int e)
{
if(s>=e)
return;
int i=s,j=e;
int tmp=a[s];
while(i<j)
{
while(a[j]>=tmp&&i<j)
j--;
Swap(a[i],a[j]);
while(a[i]<=tmp&&i<j)
i++;
Swap(a[i],a[j]);
}
QuickSort(a,s,i-1);
QuickSort(a,i+1,e);
}
改进后:
void QuickSort(int a[],int s,int e)
{
if(s>=e)
return;
int tmp=a[s];
int i=s,j=e;
while(i<j)
{
while(a[j]>=tmp&&i<j)
j--;
a[i]=a[j];
while(a[i]<=tmp&&i<j)
i++;
a[j]=a[i];
}
a[i]=tmp;
QuickSort(a,s,i-1);
QuickSort(a,i+1,e);
}