归并排序

总结

   

递归


从大到小进行排序

   

辅助数组,将两个子数组中最右边的两个数进行比较,大的放入辅助数组中,此时辅助数组的索引也从最右边开始

   

也可以从小到大进行排序,将两个子数组中最左边的两个数进行比较,小的放入辅助数组中,此时辅助数组的索引从最左边开始

   

剩下的就是合并两个排好序的子数组的代码

   

while (i >= start && j >= mid + 1) {

if (data[i] > data[j]) {

result[indexOfResult--] = data[i--];

} else {

result[indexOfResult--] = data[j--];

}

}

for (; i >= start; i--)

result[indexOfResult--] = data[i];

for (; j >= mid + 1; j--)

result[indexOfResult--] = data[j];

   

如果一个数组比较完了,那么把另外一个数组依次放入辅助数组中

   

package mergeSort;

   

public class MergeSort {

public static void main(String[] args) {

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

int[] result=data.clone();

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

for(int k:result) System.out.println(k);

}

   

static void mergeSort(int[] data, int[] result, int start, int end) {

if (start == end) {

result[start] = data[start];

return;

}

int mid = (start + end) / 2;

mergeSort(result, data, start, mid);

mergeSort(result, data, mid + 1, end);

   

int i = mid;

int j = end;

int indexOfResult = end;

while (i >= start && j >= mid + 1) {

if (data[i] > data[j]) {

result[indexOfResult--] = data[i--];

} else {

result[indexOfResult--] = data[j--];

}

}

for (; i >= start; i--)

result[indexOfResult--] = data[i];

for (; j >= mid + 1; j--)

result[indexOfResult--] = data[j];

}

}

posted @ 2015-03-23 16:33  keedor  阅读(131)  评论(0编辑  收藏  举报