A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 一直很安静 中级黑马   /  2013-11-22 20:02  /  1109 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在网上查的:将目标数组一分为二 分别进行排序后 假设指针a指向第一个数组的第一个元素 指针b指向第二个数组的第一个元素 i为目标数组的索引 初始为0 将ab 进行比较 将较小的那个放入目标数组的索引i处 然后将较小的数组所在子数组的指针和i均加1 重复比较和加1的动作 直到其中一个子数组的指针指向该数组末尾 然后将另一个数组中的数按顺序添加到目标数组末尾即可。然后我自己在写代码的时候第一步就卡了 怎样将一个数组一分为二变为俩数组啊?

3 个回复

倒序浏览
通过下标
int mid = (first + last) / 2;
然后first到mid为一个数组,mid到last为另一个数组
回复 使用道具 举报
package cn.itcase;

import java.util.Arrays;



public class SortTest {



public static void main(String[] args) {

int[] arr = { 2, 5, 3, 1, 4 };

System.out.println("排序前:" + Arrays.toString(arr));



MergeSort.sort(arr);



System.out.println("排序后:" + Arrays.toString(arr));

}



/*

* 交换数组中的两个元素

*/

public static void swap(int[] data, int i, int j) {

int temp = data[i];

data[i] = data[j];

data[j] = temp;

}

}

class MergeSort {

public static void sort(int[] data) {

int[] temp = new int[data.length];

mergeSort(data, temp, 0, data.length - 1);

}



private static void mergeSort(int[] data, int[] temp, int l, int r) {

int mid = (l + r) / 2;

if (l == r)

return;

mergeSort(data, temp, l, mid);

mergeSort(data, temp, mid + 1, r);



for (int i = l; i <= r; i++) {

temp[i] = data[i];

}

int i1 = l;

int i2 = mid + 1;

for (int cur = l; cur <= r; cur++) {

if (i1 == mid + 1)

data[cur] = temp[i2++];

else if (i2 > r)

data[cur] = temp[i1++];

else if (temp[i1] < temp[i2])

data[cur] = temp[i1++];

else



data[cur] = temp[i2++];

}

}

}


复制代码

评分

参与人数 1技术分 +1 收起 理由
To + 1 多写点自己的理解,注释

查看全部评分

回复 使用道具 举报
楼上的,给点注释好么。。。{:soso_e134:}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马