十大排序算法-快速排序

快速排序(Quick Sort)

原理:从数列中挑出一个元素,称为 “基准”(pivot)。重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作;
递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序;

逻辑代码
public class QuickSort {

    public static void main(String[] args) {
        int[] arr = {3, 44, 38, 5, 47, 15, 36, 26, 27, 2, 46, 4, 19, 50, 48};

        quick(arr,0,arr.length-1);
        Utils.printArr(arr);
    }

    static void quick(int[] arr,int left,int right) {
        if(left>right) return;
        int i = left;
        int j = right;
        int temp = arr[left];
        while (i < j) {
            //从右边查找小于基准值的数
            while (i < j && arr[j] >= temp) {
                j--;
            }
            //从左边开始查找大于基准值的数
            while (i < j && arr[i] <= temp) {
                i++;
            }
            if (i < j) {
                //交换找到的两个数
                Utils.swap(arr,i,j);
            }
        }
        //交换基准值和最终位置下标的对应的数
        arr[left] = arr[i];
        arr[i]=temp;
		//递归
        quick(arr,left,i-1);
        quick(arr,i+1,right);
    }
}

2.演示图:
演示图片为转载,转载地址:https://www.runoob.com/w3cnote_genre/algorithm

总结
时间复杂度(平均)时间复杂度(最好)时间复杂度(最坏)空间复杂度稳定性
O(nlog2n)O(nlog2n)O(n²)O(nlog2n)不稳定
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值