专业设计自学网站,电子商务网站开发教程论文6,南京英文网站制作,深企在线归并排序算法
#xff08;1#xff09;基本思想#xff1a;归并#xff08;Merge#xff09;排序法是将两个#xff08;或两个以上#xff09;有序表合并成一个新的有序表#xff0c;即把待排序序列分为若干个子序列#xff0c;每个子序列是有序的。然后再把有序子序…归并排序算法
1基本思想归并Merge排序法是将两个或两个以上有序表合并成一个新的有序表即把待排序序列分为若干个子序列每个子序列是有序的。然后再把有序子序列合并为整体有序序列。
2归并排序是建立在归并操作上的一种有效稳定的排序算法。
什么是归并操作
归并操作也叫归并算法指的是将两个顺序序列合并成一个顺序序列的方法。
如 设有数列{62021003013881}
初始状态6,202,100,301,38,8,1
第一次归并后{6,202},{100,301},{8,38},{1}比较次数3
第二次归并后{6,100,202,301}{1,8,38}比较次数4
第三次归并后{1,6,8,38,100,202,301},比较次数4
总的比较次数为34411
逆序数为14示例代码
/*** 归并排序* param nums 待排序数组* param l 开始索引0* param h 最大索引nums.length - 1* return 排序好的数组*/
public static int[] mergeSort(int[] nums, int l, int h) {if (l h)return new int[]{nums[l]};int mid l (h - l) / 2;int[] leftArr mergeSort(nums, l, mid); //左有序数组int[] rightArr mergeSort(nums, mid 1, h); //右有序数组int[] newNum new int[leftArr.length rightArr.length]; //新有序数组int m 0, i 0, j 0;while (i leftArr.length j rightArr.length) {newNum[m] leftArr[i] rightArr[j] ? leftArr[i] : rightArr[j];}while (i leftArr.length)newNum[m] leftArr[i];while (j rightArr.length)newNum[m] rightArr[j];return newNum;
}