排序算法

本文深入探讨了冒泡排序和快速排序两种经典排序算法。冒泡排序通过反复比较相邻元素实现排序,时间复杂度为O(n^2),空间复杂度为O(1),是一种稳定的排序算法。快速排序采用分治策略,平均时间复杂度为O(nlogn),但空间复杂度为O(logN),且排序过程不稳定。

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

冒泡排序

时间复杂度:o(n2)
空间复杂度: O(1)
稳定性:稳定

    /// <summary>
    /// 冒泡排序  思想 两两对比
    /// </summary>
    public void BubbleSort()
    {

        for(int i=0; i<list.Count; i++)
        {
            for(int j=0; j< list.Count-i-1; j++)
            {
                if (list[j]>list[j+1])
                {
                    int temp = list[j];
                    list[j] = list[j + 1];
                    list[j + 1] = temp;
                }
            }
        }

        foreach(var i in list)
        {
            Debug.Log(i);
        }
    }

快速排序

时间复杂度:O(nlogn)
空间复杂度O(logN)
稳定性:不稳定

    //快速排序算法(从小到大)
    //arr:需要排序的数组,begin:需要排序的区间左边界,end:需要排序的区间的右边界
    void QuickSort(List<int> arr, int begin, int end)
    {
        //如果区间不只一个数
        if (begin < end)
        {
            int temp = arr[begin]; //将区间的第一个数作为基准数
            int i = begin; //从左到右进行查找时的“指针”,指示当前左位置
            int j = end; //从右到左进行查找时的“指针”,指示当前右位置
                         //不重复遍历
            while (i < j)
            {
                //当右边的数大于基准数时,略过,继续向左查找
                //不满足条件时跳出循环,此时的j对应的元素是小于基准元素的
                while (i < j && arr[j] > temp)
                    j--;
                //将右边小于等于基准元素的数填入右边相应位置
                arr[i] = arr[j];
                //当左边的数小于等于基准数时,略过,继续向右查找
                //(重复的基准元素集合到左区间)
                //不满足条件时跳出循环,此时的i对应的元素是大于等于基准元素的
                while (i < j && arr[i] <= temp)
                    i++;
                //将左边大于基准元素的数填入左边相应位置
                arr[j] = arr[i];
            }
            //将基准元素填入相应位置
            arr[i] = temp;
            //此时的i即为基准元素的位置
            //对基准元素的左边子区间进行相似的快速排序
            QuickSort(arr, begin, i - 1);
            //对基准元素的右边子区间进行相似的快速排序
            QuickSort(arr, i + 1, end);
        }
        //如果区间只有一个数,则返回
        else
            return;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值