MergeSort
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | package Sort; /** * 归并排序是稳定排序,它也是一种十分高效的排序,能利用完全二叉树特性的排序一般性能都不会太差。 * java中Arrays.sort()采用了一种名为TimSort的排序算法,就是归并排序的优化版本。 * 从上文的图中可看出,每次合并操作的平均时间复杂度为O(n),而完全二叉树的深度为|log2n|。总的平均时间复杂度为O(nlogn)。 * 而且,归并排序的最好,最坏,平均时间复杂度均为O(nlogn)。 * */ public class MergeSort { public static void main(String[] args) { int [] arr = { 5 , 7 , 4 , 2 , 0 , 3 , 1 , 6 }; mergeSort(arr, 0 , arr.length - 1 ); for ( int i = 0 ; i < arr.length; i++) { System.out.print(arr[i] + " " ); } } public static void mergeSort( int [] arr, int left, int right) { if (left >= right) { return ; } int mid = (left + right) / 2 ; mergeSort(arr, left, mid); mergeSort(arr, mid + 1 , right); // 以上是拆分过程 merge(arr,left,mid,right); } public static void merge( int [] arr, int left, int mid, int right) { int s1 = left; int s2 = mid+ 1 ; int [] temp = new int [right - left + 1 ]; int i = 0 ; while (s1 <= mid && s2 <= right) { if (arr[s1]<arr[s2]){ temp[i++] = arr[s1++]; } else { temp[i++] = arr[s2++]; } } while (s1<= mid){ temp[i++] = arr[s1++]; } while (s2<= right){ temp[i++] = arr[s2++]; } for ( int j = 0 ; j < temp.length; j++) { arr[j+left] = temp[j]; } } } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能