归并排序采用的是分治的思想
将数组对半,再对半,再对半,再对半。。。直到最后的每一个数都成单独的一块(这里就是递归了,左半边递归,右半边递归)
再将拆开后的数组合并,合并是有序的合并,升序为例,则小的在前,大的在后。
最终得到的数组就是有序的数组
//这是一个归并排序,拆分加合并的方法 public static int[] mergeSort(int [] array, int start, int end){ if(start < end){ //向左侧拆分递归 int mid = (start + end) / 2; mergeSort(array,start,mid); mergeSort(array,mid+1,end); //归并,调用下面写的方法 merge(array,start,mid,end); } return array; } public static void merge(int [] array, int left , int mid ,int right){ int [] temp = new int [array.length]; int start1 = left;//这是左边的指针,就是开始的指针 int start2 = mid + 1; int t = left;// //第一步:按照左右两个半边进行合并,指针遍历小的就放进辅助数组temp中,直到有一边的数据以及全部放完 while(start1 <= mid && start2<=right){ if(array[start1]<=array[start2]) temp[t++]=array[start1++]; else temp[t++]=array[start2++]; } //第二步:将左边或者右边没有填充完的数据直接添加到temp辅助数组中 while (start1 <= mid){ temp[t++] = array[start1++]; } while (start2 <= right){ temp[t++] = array[start2++]; } //第三步:将temp数组复制到array数组中 for (int i = left; i <=right; i++) { array[i] = temp[i]; } }