Java实现归并排序

  1. public class MergeSort {
  2.     //将有二个有序数列a[first...mid]和a[mid...last]合并。 
  3.     static void mergearray(int a[], int first, int mid, int last, int temp[]) {
  4.         int i = first, j = mid + 1;
  5.         int m = mid, n = last;
  6.         int k = 0;


  7.         while (<= m && j <= n) {
  8.             if (a[i] <= a[j])
  9.                 temp[k++] = a[i++];
  10.             else
  11.                 temp[k++] = a[j++];
  12.         }


  13.         //如果从mid到last的数据已经遍历完毕,将first到mid剩余的数据拷贝至sorted
  14.         while (<= m) {
  15.             temp[k++] = a[i++];
  16.         }


  17.         //如果从first到mid的数据已经遍历完毕,将mid到last剩余的数据拷贝至sorted
  18.         while (<= n) {
  19.             temp[k++] = a[j++];
  20.         }


  21.         //至此,temp[]为有序的数组


  22.         //更改a[]中first至last元素顺序,使其排序
  23.         for (= 0; i < k; i++) {
  24.             a[first + i] = temp[i];
  25.         }
  26.     }


  27.     static void mergesort(int a[], int first, int last, int temp[]) {
  28.         if (first < last) {
  29.             int mid = (first + last) / 2;
  30.             mergesort(a, first, mid, temp); //递归,将数组切割至最小(1个元素)
  31.             mergesort(a, mid + 1, last, temp); //同上
  32.             mergearray(a, first, mid, last, temp); //再将相邻的二个元素合并、排序,往上递归,直至最后合并成一个最大的有序数组 
  33.         }
  34.     }


  35.     public static void main(String[] args) {
  36.         int[] x = { 6, 2, 4, 1, 5, 9, 3 };
  37.         int[] sorted = new int[x.length];
  38.         mergesort(x, 0, x.length - 1, sorted);


  39.         for (int i = 0; i < sorted.length; i++) {
  40.             System.out.println(sorted[i]);
  41.         }
  42.     }
  43. }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值