java经典排序之快速排序和归并排序

这篇博客展示了两种经典的排序算法——快速排序和归并排序的实现。快速排序通过分治策略,选取基准元素进行划分,然后递归地对子数组进行排序。归并排序则将数组分为两半,分别排序后再合并。两者都是高效的排序方法,但快速排序在平均情况下速度更快,而归并排序则保证了稳定性。
摘要由CSDN通过智能技术生成

快速排序: 

public class Quicksort {

    private int midNum(int[] arr,int begin,int end){
        int _begin=begin,t;
        while(begin<end){
            if (arr[end]>=arr[_begin]) end--;
            else {
                if (arr[begin]<=arr[_begin]) begin++;
                else {
                    t=arr[begin];
                    arr[begin]=arr[end];
                    arr[end]=t;
                }
            }
        }
        if (begin!=_begin){
            t=arr[_begin];
            arr[_begin]=arr[begin];
            arr[begin]=t;
        }

        return begin;
    }
    public void quick(int[] arr,int begin,int end){
        if (begin>=end) return;
        int mid=midNum(arr, begin, end);
        quick(arr,begin,mid-1);
        quick(arr,mid+1,end);
    }

    public static void main(String[] args) {
        int[] arr={3,2,8,54,9,45,5};
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i]+"\t");
        }
        System.out.println();
        Quicksort qk = new Quicksort();
        qk.quick(arr,0,arr.length-1);
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i]+"\t");
        }
    }

运行结果如下:

归并排序:

public class Merge {
        public static void merge(int[] arr,int low,int mid,int high,int[] temp){
            int i=0;
            int j=low,k=mid+1;//左边序列和右边序列起始索引
            while(j<=mid&&k<=high){
                if (arr[j]<arr[k]){
                    temp[i++]=arr[j++];
                }else {
                    temp[i++]=arr[k++];
                }
            }
            //若左边序列还有剩余,则将其全部拷贝进temp[]中
            while (j<=mid){
                temp[i++]=arr[j++];
            }
            while (k<=high){
                temp[i++]=arr[k++];
            }

            for (int t = 0; t < i; t++) {
                arr[low+t]=temp[t];
            }
        }

        public static void mergeSort(int[] arr,int low,int high,int[] temp){
            if (low<high){
                int mid=(low+high)/2;
                mergeSort(arr, low, mid, temp);
                mergeSort(arr,mid+1,high,temp);
                merge(arr,low,mid,high,temp);
            }
        }

        public static void main(String[] args) {
        int[] arr={3,2,8,54,9,45,5};
            for (int i = 0; i < arr.length; i++) {
                System.out.print(arr[i]+"\t");
            }
            System.out.println();
        int[] temp=new int[arr.length];
        mergeSort(arr,0,arr.length-1,temp);
            for (int i = 0; i < arr.length; i++) {
                System.out.print(arr[i]+"\t");
            }
    }


}

运行结果如下:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值