C++常用算法解析之快速排序

//方法一:经典方法

void Qsort(int a[], int low, int high)
{
    if(low >= high)
        return;
    
    int first = low;
    int last  = high;
    int key   = a[first]; //用数组的第一个数作为枢轴

    while(first < last)
    {
        while(first < last && a[last] >= key)
        {
            --last;
        }
        a[first] = a[last]; //将比第一个小的移到低端

        while(first < last && a[first] <= key)
        {
            ++first;
        }
        a[last] = a[first]; //将比第一个大的移到高端
    }
    
    key = a[first]; //枢轴记录到位
    Qsort(a, low, first - 1);
    Qsort(a, first + 1, high);
}


//方法二:常见写法

int PartSort1(int *a, int begin, int end)
{
    int &key = a[end];

    while(begin < end)
    {
        while(begin < end && a[begin] <= key)
        {
            ++begin;
        }

        while(begin < end && a[end] >= key)
        {
            --end;
        }

        if(begin < end)
            swap(a[begin], a[end]);
    }
    swap(a[begin], key);

    return begin;
}

void QuickSort(int *a, int begin, int end)
{
    if(begin >= end)
        return;
    else
    {
        int div = PartSort(a, begin, end);
        QuickSort(a, begin, div - 1);
        QuickSort(a, div + 1, end);
    }
}



int main()
{
    int a[] = {57, 68, 59, 52, 72, 28, 96, 33, 24};
 
    Qsort(a, 0, sizeof(a) / sizeof(a[0]) - 1);  //这里原文第三个参数要减1否则内存越界
    //QuickSort(a, 0, sizeof(a) / sizeof(a[0]) - 1);
 
    for(int i = 0; i < sizeof(a) / sizeof(a[0]); i++)
    {
        cout << a[i] << " "<< " ";
    }
   return 0;
}

 

你可能感兴趣的:(C++常见算法解析)