归并排序
/** * 归并排序 * 进行左右排序,然后归并, * @param numbers * @param low * @param high */ static void mergeSort(int[] numbers,int low,int high){ int mid = (high + low)/2; if (low < high) { //左排序 mergeSort(numbers, low, mid); //右排序 mergeSort(numbers, mid + 1 , high); //归并 merge(numbers, low, mid, high); } }
static void merge(int[] numbers,int low,int mid,int high){ int[] tmp = new int[high - low + 1]; int i = low;//左指针 int j = mid + 1;//右指针 int k = 0; while(i <= mid&&j <= high){ if (numbers[i] < numbers[j]) { tmp[k++] = numbers[i++]; }else { tmp[k++] = numbers[j++]; } } while (i <= mid) { tmp[k++] = numbers[i++]; } while (j <= high) { tmp[k++] = numbers[j++]; } for (int k2 = 0; k2 < tmp.length; k2++) { numbers[k2 + low] = tmp[k2]; } }