QuickSort快速排序源码

本文详细介绍了一种高效的排序算法——快速排序。提供了快速排序的源码实现,并通过一个测试案例展示了如何使用快速排序对浮点数数组进行降序排列。源码中包括了比较元素、划分数组、递归调用等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

QuickSort快速排序源码


QuickSort.h源码

#include "stdafx.h"
template<typename T> class QuickSort
{
private:
    static bool Compare(T a, T b, bool useDesc)
    {
        return useDesc?(a >= b) : (a <= b);
    }
    static void InnerSort(T arr[], int start, int end, bool useDesc)
    {
        if(start >= end)
        {
            return;
        }
        //一般用第一个作为划分标准
        //也可以从数组里随机一个作为划分标准
        //甚至用其中两个的平均或者整个数组的平均值,但不实用
        T b = arr[start];
        int l = start;
        int r = end;
        while(l<r)
        {
            while(l<r && Compare(b, arr[r],useDesc))//从右往左,找第一个比b小的r(升序排列)
            {
                r--;
            }
            if(l < r)
            {
                arr[l++] = arr[r]; //将第一个比b小的arr[r]放到arr[l],l位置变成已划分好
            }
            while(l<r && Compare(arr[l], b,useDesc)) //从左往右,找第一个比b大的l(升序排列)
            {
                l++;
            }
            if(l<r) 
            {
                arr[r--] = arr[l]; //将第一个比b大的arr[l]放到arr[r],r位置变成已划分好
            }
        }
        arr[l] = b;
        InnerSort(arr,start, l-1, useDesc);
        InnerSort(arr,l+1,end,useDesc);

    }
public:
    static void Sort(T arr[], int len, bool useDesc=false)
    {
        InnerSort(arr,0,len-1,useDesc);
    }
};

QuickSortTest.h源码

#include "stdafx.h"
#include "QuickSort.h"
#include <iostream>
using namespace std;
class QuickSortTest
{
public: 
    void DoTest()
    {

        float arr[10] = {3,3.3f, 1.2f, 6.2f, 4.2f, 0.3f, 5.1f, 8, 7, 2.3f};
        QuickSort<float>::Sort(arr,10,true);
        for(int i=0; i<10; i++)
        {
            cout<< arr[i] << " ";
        }
        cout <<endl;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值