黑马程序员技术交流社区

标题: 归并排序 [打印本页]

作者: 一直很安静    时间: 2013-11-22 20:02
标题: 归并排序
在网上查的:将目标数组一分为二 分别进行排序后 假设指针a指向第一个数组的第一个元素 指针b指向第二个数组的第一个元素 i为目标数组的索引 初始为0 将ab 进行比较 将较小的那个放入目标数组的索引i处 然后将较小的数组所在子数组的指针和i均加1 重复比较和加1的动作 直到其中一个子数组的指针指向该数组末尾 然后将另一个数组中的数按顺序添加到目标数组末尾即可。然后我自己在写代码的时候第一步就卡了 怎样将一个数组一分为二变为俩数组啊?
作者: 何丛    时间: 2013-11-22 20:45
通过下标
int mid = (first + last) / 2;
然后first到mid为一个数组,mid到last为另一个数组

作者: 简★零度    时间: 2013-11-22 22:21
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++];

}

}

}


复制代码
作者: 零下五度的水    时间: 2013-11-22 22:31
楼上的,给点注释好么。。。{:soso_e134:}




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2