赞
踩
/** * @Author: feifei * @Date: 2023/06/08/4:50 下午 * @Description: 思路同归并排序 */ public class SmallMergeSort { public static void main(String[] args) { int[] arr = {1, 1, 3}; System.out.println(smallMerge(arr, 0, arr.length - 1)); } public static int smallMerge(int[] arr, int l, int r) { if (l == r) { return 0; } int mid = l + ((r - l) >> 2); return smallMerge(arr, l, mid) + smallMerge(arr, mid + 1, r) + merge(arr, l, mid, r); } private static int merge(int[] arr, int l, int mid, int r) { //初始化数组 int[] help = new int[r - l + 1]; //返回值初始化 int res = 0; //索引初始化 int i = 0; int p1 = l; int p2 = mid + 1; //p2位置和p1位置的值相等时,放p2位置的指到临时数组 while (p1 <= mid && p2 <= r) { res += arr[p2] > arr[p1] ? (r - p2 + 1) * arr[p1] : 0; help[i++] = arr[p2] > arr[p1] ? arr[p1++] : arr[p2++]; } while (p1 <= mid) { help[i++] = arr[p1++]; } while (p2 <= r) { help[i++] = arr[p2++]; } for (int j = 0; j < help.length; j++) { arr[l + j] = help[j]; } return res; } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。