快速排序算法

快速排序算法

快速排序是一种高效的排序算法,其核心思想是通过分治法将数组分成两部分,一部分小于某个基准值,另一部分大于基准值,然后递归地对这两部分进行排序。以下是快速排序算法的C++实现:

快速排序的C++实现代码:

#include 
#include
using namespace std;

void Swap(int& a, int& b)
{
	int nTemp = a;
	a = b;
	b = nTemp; 
}


int Partition(vector& arr,int nLow,int nHigh)
{
    if (nLow > nHigh)
        return -1;
    // 选择最后一个元素作为基准值
    int nPivot = arr[nHigh];
    // 用于记录小于基准值的元素的边界
    int i = nLow - 1;
    for (int j = nLow;j < nHigh;j++)
    {
        // 如果当前元素小于或者等于基准值
        if (arr[j] <= nPivot)
        {
            // 扩展小于基准值的区域
            i++;
            // 将当前元素交换到小于基准值的区域
            Swap(arr[i],arr[j]);
        }
    }
    // 将基准值放到正确的位置上
    Swap(arr[i+1],arr[nHigh]);
    return i + 1;
}

void QuickSort(vector& arr, int nLow, int nHigh)
{
    if (nLow > nHigh)
        return;
    int nPart = Partition(arr, nLow, nHigh);
    QuickSort(arr,nLow, nPart - 1);
    QuickSort(arr, nPart + 1, nHigh);
}



int main()
{
    vector arr{0,9,7,3,6,2,1,5,4,8};
    cout << "排序前" << endl;
    for (auto i: arr)
    {
        cout << i << " ";
    }
    cout << endl;

    QuickSort(arr,0, arr.size()-1);

    cout << "排序后" << endl;
    for (auto i : arr)
    {
        cout << i << " ";
    }
    cout << endl;
    std::cout << "Hello World!\n";
}

代码运行结果:

快速排序算法_第1张图片

代码说明

  1. swap函数
    • 用于交换两个整数的值,通过引用传递实现交换。
  2. partition函数
    • 这是快速排序的核心函数,它选择一个基准值(通常是数组的最后一个元素),并重新排列数组,使得所有小于基准值的元素都位于基准值的左边,所有大于基准值的元素都位于基准值的右边。
    • 返回基准值的最终位置。
  3. quickSort函数
    • 这是一个递归函数,用于对数组进行快速排序。
    • 它首先调用partition函数将数组分成两部分,然后递归地对这两部分进行排序。

时间复杂度

  • 平均时间复杂度O(nlogn)
  • 最坏时间复杂度O(n2)(当输入数组已经有序或逆序时)
  • 空间复杂度O(logn)(递归调用的栈空间)

间复杂度**:O(nlogn)

  • 最坏时间复杂度O(n2)(当输入数组已经有序或逆序时)
  • 空间复杂度O(logn)(递归调用的栈空间)

快速排序是一种非常高效的排序算法,尤其在处理大规模数据时表现良好。

你可能感兴趣的:(数据结构,数据结构)