本文共 1087 字,大约阅读时间需要 3 分钟。
最近复习算法,为了年后找工作做准备,看了看网上归并排序,只懂算法原理源码没有看懂,算了,还是根据原理手撸吧!!!
如果大家想了解其他两种牛掰的排序,请猛戳下面链接
归并排序复杂度O(nlogn)
public class MergeSort { public static int arr[] = {2,4,7,8,9,4,5,1,2,3,6,8,7,8,54,4,2,58,47,5,8,4,2,5}; public static void main(String[] args) { sort(arr,0,arr.length-1); //排序 print(); //打印 } //拆分 public static void sort(int left,int right){ if(left >= right) return; //递归终止条件,一个子数组只有一个或两个元素 if(right-left==1){ if(arr[left]>arr[right]){ int t = arr[left]; arr[left] = arr[right]; arr[right] = t; } return; } //递归分解 int mid = (left + right)/2; sort(arr,left,mid); sort(arr,mid+1,right); //合并 merge(left,mid,right); } //合并 public static void merge(int left,int mid,int right){ int i = left; int j = mid+1; int k = 0; //开辟临时数组,合并两个有序子数组 int temp[] = new int[right-left+1]; while(i<=mid && j<=right){ if(arr[i]
自己手撸的印象确实比看网上或看书来的深刻
结束,拜拜
转载地址:http://hncrj.baihongyu.com/