c++实现快速排序(快排)

当我们需要对一个大量数据进行排序时,常常需要对不同的算法进行比较与选择。其中快速排序被认为是最常用和最快速的排序算法之一。

快速排序算法利用的是分治的思想。首先选取一个数作为基准点,将序列中的元素分为小于和大于基准点的两个子序列,然后分别对子序列进行递归排序。在递归处理子序列的过程中,基准点不断地被比较和交换位置,最终得到有序的序列。

具体来说,对于一个序列,我们首先选取一个基准点,可以选择第一个数、最后一个数、中间数,或者随机选取一个数。然后将序列中小于或等于基准点的数放在基准点左侧,大于基准点的数放在基准点右侧,即将序列分为两个部分。接着,对这两部分分别重复上述步骤,直到子序列无法再分割,即递归结束。

相比其他常用的排序算法,快速排序的优点在于算法时间复杂度低,并且在实际的应用中表现也非常良好。但是它也有一些局限性,例如对于某些极端情况下的数据,排序效率可能会非常低。 总的来说,快速排序是一种非常常用和实用的排序算法,对于需要排序的大规模数据,优化后的快速排序算法能够帮助我们快速高效地完成排序任务。

代码在这

#include 
#include 
using namespace std;

void quickSort(vector& nums, int left, int right) //这是一个递归的函数
{
    if (left >= right) return;//*********递归的终点**********
    int pivot = nums[left];//初始化一个中间点
    int i = left, j = right;//这个算法默认右端为大,左端小,i为左端指针,j为右端指针
    while (i < j) //开始while循环
	{
        while (i < j && nums[j] >= pivot) j--;//从右往左while,大就一直走,否则跳出交换
        nums[i] = nums[j];
        while (i < j && nums[i] <= pivot) i++;//从左往右while,小就一直走,否则跳出交换
        nums[j] = nums[i];
    }
    nums[i] = pivot;//注意,最后要把最开始取出的中间点,放到最后的i位置
    for (int k = 0; k < nums.size(); k++) //对这次的结果进行输出显示
	{
        cout << nums[k] << " ";
    }
    cout << endl;
    quickSort(nums, left, i - 1);//左边递归
    quickSort(nums, i + 1, right);//右边递归
}

int main()
 {
    int T;
    cin >> T;
    while (T--) {
        int n;
        cin >> n;
        vector nums(n);
       
        for (int i = 0; i < n; i++) {
            cin >> nums[i];
        }
        quickSort(nums, 0, n - 1);
    }
    return 0;
}

你可能感兴趣的:(c++,排序算法,算法)