java归并排序

来源:互联网 发布:阿里云与腾讯云比较 编辑:程序博客网 时间:2024/04/29 17:01
package com.zz.sort;import java.util.Random;public class MergeSortZZ {public static void main(String[] args) {//int[] iArrgs = new int[] { 10, 3, 18, 3, 5, 8, 16, 4, 2 };int iLength = 5000;int[] iArgs = new int[iLength];for (int i = 0; i < iLength; i++) {Random objRandom = new Random();iArgs[i] = objRandom.nextInt(10000);}mergeSort(iArgs, new int[iArgs.length], 0, iArgs.length - 1);   for(int i = 0; i < iArgs.length; i++ ) { System.out.print(iArgs[i] + " " ); }}/** * 把一个大数组分成两个数组 *  * @param iArrgs 排序数组 * @param tempArrgs 临时数组 * @param left 排序数组左下标 * @param right 排序数组右下标 */private static void mergeSort(int[] iArrgs, int[] tempArrgs, int left, int right) {if(left < right) {int iMiddle =  ( left + right ) / 2;//左边切分数组 mergeSort(iArrgs, tempArrgs, left, iMiddle) ;//右边切分数组 mergeSort(iArrgs, tempArrgs, iMiddle + 1, right) ; //排序 merge(iArrgs, tempArrgs,left,iMiddle + 1,right);}}/** * 把两个数组按照从小到大的顺序排序 *  * @param iArrgs 排序数组 * @param tempArrgs 临时数组 * @param left 排序数组左下标 * @param middle 排序数组中间位置  * @param right 排序数组右下标 */private static void merge(int[] iArrgs, int[] tempArrgs, int left,int middle, int right) {//左数组末尾下标int leftEnd = middle -1;//右数组开始下标int rightStart = middle;//临时数组下标int tempIndex = left;//数组的长度int length = right - left + 1;//两个数组比较大小while(left <= leftEnd && rightStart <= right) {//值小的放入临时数组if (iArrgs[left] < iArrgs[rightStart]) {tempArrgs[tempIndex++] = iArrgs[left++];} else {tempArrgs[tempIndex++] = iArrgs[rightStart++];}}//如果进入下面循环,表示他们在临时数组的中是最大的。while(left <= leftEnd ) {tempArrgs[tempIndex++] = iArrgs[left++];}//如果进入下面循环,表示他们在临时数组的中是最大的。while(rightStart <= right) {tempArrgs[tempIndex++] = iArrgs[rightStart++];}for (int i = right; i >= 0; i--) {//临时数组里面的iArrgs[i] = tempArrgs[i];}}}

原创粉丝点击