java归并排序

来源:互联网 发布:api.ai源码 编辑:程序博客网 时间:2024/04/29 23:45
 
/** *Project:JavaArithmetic *Packages:sort *File_nameMergeSort.java *Date2011-10-28 */package sort;/** * @author Administrator 归并排序 */public class MergeSort {public MergeSort() {}// 归并操作,对数组a[]中从low到mid,mid到high位置的元素进行归并操作// 假设第一和第二元素段都是有序的public static void merge(int a[], int low, int mid, int high) {int[] b = new int[high - low + 1];// 用于存储排好的元素int k = 0;// b数组的指标int start1 = low;// s指向待排序的第一个数据段的首元素int start2 = mid + 1;// start2指向指向第二个数据段的首元素while (start1 <= mid && start2 <= high) {if (a[start1] < a[start2]) {// 把元素加入b数组,指标向前移动一个位置b[k++] = a[start1++];} else {b[k++] = a[start2++];}}// 当第一元素段的元素还有剩余时,全部加入到b数组中while (start1 <= mid) {b[k++] = a[start1++];}// 当第二元素段的元素还有剩余时,全部加入到b数组中while (start2 <= high) {b[k++] = a[start2++];}for (int i = 0; i < b.length; i++) {a[low + i] = b[i];}}/** * 归并排序 */public static void mergeSort(int a[], int low, int high) {if (low < high) {mergeSort(a, low, ((high + low) / 2));mergeSort(a, ((high + low) / 2) + 1, high);merge(a, low, (high + low) / 2, high);}}/** *  */public static void main(String[] args) {int[] a = { 1, 5, 6, 9, 8, 7, 5, 6, 3, 2, };mergeSort(a, 0, 9);for (int i = 0; i < a.length; i++) {int j = a[i];System.out.print(j + "-");}}}

原创粉丝点击