快速排序

快速排序之所比较快,因为相比冒泡排序,每次交换是跳跃式的。每次排序的时候设置一个基准点,将小于等于基准点的数全部放到基准点的左边,将大于等于基准点的数全部放到基准点的右边。这样在每次交换的时候就不会像冒泡排序一样每次只能在相邻的数之间进行交换,交换的距离就大的多了。因此总的比较和交换次数就少了,速度自然就提高了。当然在最坏的情况下,仍可能是相邻的两个数进行了交换。因此快速排序的最差时间复杂度和冒泡排序是一样的都是O(N2),它的平均时间复杂度为O(NlogN)。其实快速排序是基于一种叫做“二分”的思想。

代码:

public class Hello {
     static void  quick_sort(int[] arr,int begin,int end){

        if(begin > end){
            return ;
        }
        int temp = arr[begin];//基准位
        int i = begin;
        int j = end;

        while(i != j){
            //先看右边,依次往左递减
            while(i < j && arr[j] >= temp){
                j--;
            }
            //再看左边,依次往右递增
            while(i < j && arr[i] <= temp){
                i++;
            }
            //如果满足条件,则交换
            if(j>i){
                int t = arr[i];
                arr[i] = arr[j];
                arr[j] = t;

            }
        }
        //最后将基准位与i的位置相交换
        arr[begin] = arr[i];
        arr[i] = temp;
        //递归调制左边数组
        quick_sort(arr,begin,i-1);
        //递归调制右边数组
        quick_sort(arr,i+1,end);
    }

    public static void main(String []args){
        int[] array = {44,4,55,67,34,8,23};

        System.out.println("排序之前:");
        for(int num:array){
            System.out.print(num + " ");
        }
        Hello.quick_sort(array,0,array.length-1);

        System.out.println();
        System.out.println("排序之后:");

        for(int num:array){
            System.out.print(num + " ");
        }

    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值