归并排序算法(仅使用一个函数)

在网上看到归并排序基本上都是把拆分和合并分成两个函数,个人不太喜欢,就自己写一个合成同一个函数的,用起来方便些,记录在这里


public class MergeSort {
    public static void MergeSort(int[] arr,int start,int end){
        if(arr.length<=1||start>=end){
            return;
        }
        int mid=start+(end-start)/2;
        MergeSort(arr,start,mid);
        MergeSort(arr,mid+1,end);
        int[] tmp=new int[end-start+1];
        int i=start,j=mid+1,k=0;
        while(i<=mid&&j<=end){
            tmp[k++]=arr[i]<arr[j]?arr[i++]:arr[j++];
        }
        while(i<=mid){
            tmp[k++]=arr[i++];
        }
        while(j<=end){
            tmp[k++]=arr[j++];
        }
        for(i=0;i<tmp.length;i++){
            arr[start+i]=tmp[i];
        }
    }

    public static void main(String[] args) {
        int[] a=new int[]{4,2,54,2,3342,64,34,2365,463,52,36,32,323,15,234};
        MergeSort(a,0,a.length-1);
        printarr(a);
    }

    public static void printarr(int[] arr) {
        for(int i=0;i<arr.length;i++){
            System.out.print(arr[i]+" ");
        }
        System.out.println();
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
归并排序是一种经典的排序算法,它采用分治策略,将一个大问题分解成多个小问题,然后将小问题解决后合并起来得到原问题的解。下面是使用Python实现归并排序的代码: ``` def merge_sort(arr): if len(arr) <= 1: return arr mid = len(arr) // 2 left = arr[:mid] right = arr[mid:] left = merge_sort(left) right = merge_sort(right) return merge(left, right) def merge(left, right): result = [] i = 0 j = 0 while i < len(left) and j < len(right): if left[i] <= right[j]: result.append(left[i]) i += 1 else: result.append(right[j]) j += 1 result += left[i:] result += right[j:] return result ``` 这个代码中,我们定义了两个函数:`merge_sort`和`merge`。其中,`merge_sort`函数归并排序的主体部分,它将一个未排序的数组作为输入,并返回一个已排序的数组。首先,如果输入数组的长度小于等于1,则直接返回该数组。否则,我们找到数组的中间位置,并将其分成左右两个子数组。然后再递归调用`merge_sort`函数来对左右两个子数组进行排序。最后,我们将左右两个有序的子数组合并成一个有序的数组并返回。 `merge`函数用于将两个已排序的子数组合并成一个更大的已排序的数组。它使用两个指针`i`和`j`来分别指向左右两个子数组的第一个元素,并比较它们的大小。如果左子数组的元素小于等于右子数组的元素,则将左子数组的元素添加到结果数组中,并递增`i`指针;否则将右子数组的元素添加到结果数组中,并递增`j`指针。最后将剩余的元素追加到结果数组中。 最后,我们可以测试一下这个归并排序算法: ``` arr = [2, 1, 4, 3, 6, 5] sorted_arr = merge_sort(arr) print(sorted_arr) ``` 输出结果为: ``` [1, 2, 3, 4, 5, 6] ``` 可以看到,这个归并排序算法成功地将输入的未排序数组排序成了一个有序的数组。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值