C# 常用排序算法——交换排序:快速排序

思想:分治法

做法:取基准,小于基准的放左边,大于基准的放右边,从而酱待排序表划分为两个独立的部分,即为一趟快排。

特点:

1.内部排序中性能最优

2.每趟排序基准元素都会放到最终位置上

 public static void QuickSort(int[] array, int left, int right)
        {
            //第七步:
            //递归函数结束条件
            if (left >= right)
                return;
            //第二步:
            //记录基准值
            //左游标
            //右游标
            int tempLeft, tempRight, temp;
            temp = array[left];
            tempLeft = left;
            tempRight = right;
            //第三步:
            //核心交换逻辑
            //左右游标会不同变化 要不相同时才能继续变化
            while(tempLeft != tempRight)
            {
                //第四步:比较位置交换
                //首先从右边开始 比较 看值有没有资格放到表示的右侧
                while (tempLeft < tempRight &&
                    array[tempRight] > temp)
                {
                    tempRight--;
                }
                //移动结束证明可以换位置
                array[tempLeft] = array[tempRight];

                //上面是移动右侧游标
                //接着移动完右侧游标 就要来移动左侧游标
                while (tempLeft < tempRight &&
                    array[tempLeft] < temp)
                {
                    tempLeft++;
                }
                //移动结束证明可以换位置
                array[tempRight] = array[tempLeft];
            }
            //第五步:放置基准值
            //跳出循环后 把基准值放在中间位置
            //此时tempRight和tempLeft一定是相等的
            array[tempRight] = temp;

            //第六步:
            //递归继续
            QuickSort(array, left, tempRight - 1);
            QuickSort(array, tempLeft + 1, right);
        }

复杂度分析

  • 时间复杂度:O(nlogn)
  • 空间复杂度:O(logn)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值