和传统快速排序比起来,这样的改动可以达到比sort更快,我愿称之为高速排序
相比较与传统快速排序,高速排序则采用了二分的思想,更加高速
旧版
void quicksort(int begin,int end,int now)
{
if(now==0)
return;
int left,right;
left=begin;right=end;
while(1)
{
while(right>left&&a[right]>a[begin])
{
right--;
}
while(left<right&&a[left]<a[begin])
{
left++;
}
if(left<right)
{
swap(a[left],a[right]);
continue;
}
if(left==right)
{
swap(a[left],a[begin]);
break;
}
}
if(begin<left-1)
quicksort(begin,left-1,left-begin);
if(left<end-1)
quicksort(left+1,end,end-left);
return;
}
新版
void quicksort(int begin,int end)
{
int left,right,mid;
left=begin;right=end;
mid=a[(begin+right)/2];
while(left<=right)
{
while(a[right]>mid)
{
right--;
}
while(a[left]<mid)
{
left++;
}
if(left<=right)
{
swap(a[left],a[right]);
left++;
right--;
}
}
if(begin<right)
quicksort(begin,right);
if(left<end)
quicksort(left,end);
return;
}