您的位置:首页 > 其它

快速排序

2012-05-22 15:42 113 查看
  快速排序是一种不稳定的排序(其余的不稳定排序有堆排序,直接选择排序,希尔排序),而且是目前已知最快的排序算法。原理不再说了,直接上代码。  

首先是一次划分的实现

  int partition(int arr[], int low, int high):将arr中小于arr[low]的元素放在左半部分,大于arr[low]的元素放在右半部分

int partition(int arr[], int low, int high)
{
int pivotkey = arr[low], rc = arr[low];

while(low < high)
{
while(low < high && arr[high] >= pivotkey) --high;
arr[low] = arr[high];
while(low < high && arr[low] <= pivotkey) ++low;
arr[high] = arr[low];
}

arr[low] = rc;
return low;
}


然后是快速排序的主程序:

  void quicksort(int arr[], int low, int high): 将[low:high]范围内的所有元素作快速排序

void quicksort(int arr[], int low, int high)
{
int pivotloc;
if(low < high)
{
pivotloc = partition(arr, low, high);
quicksort(arr, low, pivotloc-1);
quicksort(arr, pivotloc+1, high);
}
}


  需要注意的是,在我们的partition中,如果arr是有序的,则快速排序的最坏性能是O(n*n),所以为了找到更好的枢纽,有时候需要在partition中找出arr[low], arr[high]和arr[(low+high)/2]三个元素中的中间值作枢纽,这样能有效避免上面的这种最坏情况。

Over~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: