快速排序

来源:互联网 发布:手机看本子的软件 编辑:程序博客网 时间:2024/06/03 20:23

1.基本思想

通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

2.单趟排序分析

我这里用的是左右指针的方法,下面具体的步骤以及代码的实现
这里写图片描述

代码实现:

int PortSort(int* arr, int begin, int end)//左右指针法{    assert(arr);    int left = begin;    int right = end;    int mid = SelectMid(arr, begin, end);    swap(arr[mid], arr[end]);    int key = arr[end];//基准值    while (left < right)    {        while (left < right && arr[left] <= key)        {            left++;        }        while (left < right && arr[right] >= key)        {            right--;        }        if (arr[left] > arr[right])        {            swap(arr[left], arr[right]);        }    }    //把key放进去    swap(arr[left], arr[end]);    return left;}

3.快速排序的实现

void QuickSort(int* arr, int begin, int end){    assert(arr);    if (begin < end)    {        int div = PortSort(arr, begin, end);        QuickSort(arr, begin, div - 1);        QuickSort(arr, div + 1, end);    }}
原创粉丝点击