内排序-归并排序
Posted mytrip
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了内排序-归并排序相关的知识,希望对你有一定的参考价值。
基本的算法思想:简单的可以说将原序列划分为 左右两个序列,再令这两个序列分别为有序序列,最后合并这两个有序序列,也称为二路归并;(在递归的最后一个层次里保证左右两个序列各有一个元素,这两个元素很容易有序,递归而去它们的父级序列也就很容易有序,最后整个序列也有有序了)
package sort; import java.io.IOException; public class MergeSort { public static void main(String[] args) { int[] a = new int[] { 20, 30, 90, 40, 70, 110, 60, 10, 100, 50, 80, 9, 8, 7, 6 }; MergeSort mergesort = new MergeSort(); mergesort.Sort(a, 0, a.length - 1); for (int i : a) { System.out.println(i); } } public void Sort(int[] arrays, int left_index, int right_index) { if (left_index < right_index)//当left_index == right_index 说明是单个元素, 不可再向下递归了 { int i = left_index; int j = right_index; int m = (i + j) / 2; Sort(arrays, i, m); Sort(arrays, m + 1, right_index); Merger(arrays, i, m, j);//直到找到两个紧邻的元素 } } void Merger(int[] array, int left, int mid, int right) {//对同一个数组左右两边的有序队列进行合并 int i = left; int m = mid; int j = mid+1; int k=0; int[] temp = new int[right - left+1]; while (i <= m && j<= right) { //从左右两边找出最小的元素 放入temp队列 if ( array[i] <= array[j]) temp[k++] = array[i++]; if ( array[i] > array[j]) temp[k++] = array[j++]; } //i <= m说明 j指向的队列元素已全部进入temp while (i <= m) { temp[k++] = array[i++]; } //j<= right说明 j指向的队列元素已全部进入temp while (j <= right) { temp[k++] = array[j++]; } //序号 left 到 right的元素,重置为排好元素 for (k = 0; k < temp.length;k++) { array[left + k] = temp[k]; } } }
以上是关于内排序-归并排序的主要内容,如果未能解决你的问题,请参考以下文章