java 的归并排序_java归并排序

public class MergeSort {

public static void mergeSort(DataWrap [] data)

{

sort(data , 0 , data.length-1);

}

/**

* 将索引从left到right范围的数组元素进行归并排序

* @param data 待排序的数组

* @param left 待排数组的元素的第一个索引

* @param right 待排数组的元素的最后一个索引

*/

private static void sort(DataWrap[] data, int

left, int right) {

if(left < right)

{

//找出中间索引

int center = (left + right)/2;

//对左边数组进行递归

sort(data , left , center);

//对右边的数组进行递归

sort(data , center+1, right);

//合并

merge(data , left , center , right);

}

}

/**

* 讲两个数组进行合并,合并之前两个数组已经有序,归并后依然有序

* @param data 数组对象

* @param left 左数组第一个元素的索引

* @param center 左数组的最后一个元素的索引 ,center+1右数组的第一个元素的索引

* @param right 右数组的最后一个元素的索引

*/

private static void merge(DataWrap[] data, int left, int center, int right) {

DataWrap [] tmpArry = new DataWrap [data.length];

int mid = center +1;

//third记录中间数组的索引

int third = left;

int tmp = left;

while(left <= center && mid <=right)

{

//从两个数组中取出小的数放入中间数组

if(data[left].compareTo(data[mid]) <=0)

{

tmpArry[third++] = data[left++];

}

else

{

tmpArry[third++] = data[mid++];

}

}

//剩余部分依次放入中间数组

while(mid <= right)

{

tmpArry[third++] = data[mid++];

}

while(left <= center)

{

tmpArry[third++] = data[left++];

}

//将中间数组的内容复制拷贝到原数组

//(原left-right范围内的内容被复制回原数组)

while(tmp <= right)

{

data[tmp] = tmpArry[tmp++];

}

}

public static void main(String[] args) {

DataWrap[] data = {

new DataWrap(21, ""),

new DataWrap(30, ""),

new DataWrap(49, ""),

new DataWrap(30, ""),

new DataWrap(16, ""),

new DataWrap(9, ""),

new DataWrap(-16, "")

};

System.out.println("排序之前:\n" + java.util.Arrays.toString(data));

mergeSort(data);

System.out.println("排序之后:\n" + java.util.Arrays.toString(data));

}

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值