java练习题之冒泡排序与递归快排的比较

java练习题之冒泡排序与递归快排的比较

定义两个内容一样的数组,分别是使用冒泡排序和快速排序,对其进行排序,比较两种排序的效率

public class Kuaipai_sort {

    public static void main(String[] args) {
        int[] arr = {6, 1, 4, 9, 3, 5, 7, 8, 10};
        int[] arr1 = {6, 1, 4, 9, 3, 5, 7, 8, 10};
        //冒泡排序
        long start1=System.currentTimeMillis();   //计算冒泡排序开始的时间
        maoPao(arr1);
        printArr(arr1);
        long end1=System.currentTimeMillis();//计算冒泡排序结束的时间
        System.out.println("冒泡排序:"+(end1-start1)+"毫秒");
        //快速排序
        long start2=System.currentTimeMillis();
        kuaiPai(arr,0,arr.length-1);
        printArr(arr);
        long end2=System.currentTimeMillis();
        System.out.println("快速排序:"+(end2-start2)+"毫秒");
    }

    private static void maoPao(int[] arr1) {
        for (int i = 0; i < arr1.length-1; i++) {

            for (int j = 0; j < arr1.length-1-i; j++) {
                if(arr1[j]>arr1[j+1]){
                    //一个数  被另一个数  异或两次  返回还是原数本身  
                    arr1[j]=arr1[j]^arr1[j+1];
                    arr1[j+1]=arr1[j]^arr1[j+1];
                    arr1[j]=arr1[j]^arr1[j+1];
                }
            }
        }
    }

    private static void printArr(int[] arr) {
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i]+" ");
        }
        System.out.println();
    }

    private static void kuaiPai(int[] arr, int left, int right) {
        //存储一下初始索引
        int left_0=left;
        int right_0=right;
        //终止递归,也是方法的结束口
        if(left_0>=right){
            return;
        }

        //基准数
        int baseNumber = arr[left_0];
        while(left!=right){
            //先从右边开始查找  比基准数小的数
            while(arr[right]>=baseNumber && left<right){
                right--;
            }
            //从左边边开始查找   比基准数大的数
            while(arr[left]<=baseNumber && left<right){
                left++;
            }
            //交换  比基准数大的数和比基准数小的数   的位置
            int temp=arr[right];
            arr[right]=arr[left];
            arr[left]=temp;
        }
        int temp=arr[right];
        arr[right]=arr[left_0];
        arr[left_0]=temp;

        //递归下去
        kuaiPai(arr,left_0,right-1);
        kuaiPai(arr,right+1,right_0);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值