首页 > 代码库 > 基本排序算法Java实现(2)——归并排序
基本排序算法Java实现(2)——归并排序
归并排序:升序排
private <T extends Comparable<? super T>> void mergeSortByAsc(T[] data, int low,int high) { T[] temp; /** 如果左右相等,则返回 */ if(low == high) return; /** 找到长度和中间的那个数*/ int size = high - low +1; int mid = (low + high)/2; temp = (T[])(new Comparable[size]); /** 对左边的数据进行排序*/ mergeSort(data, low, mid); /** 对右边的数据进行排序*/ mergeSort(data, mid + 1, high); /** copy 排序的数组*/ for(int i = 0;i < size; i++){ temp[i] = data[low + i]; } /** 合并两个排序的数组*/ int left = 0; int right = mid - low + 1; for(int i = 0; i < size; i++){ if(right <= high - low){ if(left <= mid - low){ if(temp[left].compareTo(temp[right]) > 0){ data[i + low] = temp[right ++ ]; }else{ data[i + low] = temp[left ++]; } }else{ data[i + low] = temp[right ++ ]; } }else{ data[i + low] = temp[left ++]; } } }
降序排:
private <T extends Comparable<? super T>> void mergeSortByDesc(T[] data, int low,int high) { T[] temp; /** 如果左右相等,则返回 */ if(low == high) return; /** 找到长度和中间的那个数*/ int size = high - low +1; int mid = (low + high)/2; temp = (T[])(new Comparable[size]); /** 对左边的数据进行排序*/ mergeSortByDesc(data, low, mid); /** 对右边的数据进行排序*/ mergeSortByDesc(data, mid + 1, high); /** copy 排序的数组*/ for(int i = 0;i < size; i++){ temp[i] = data[low + i]; } /** 合并两个排序的数组*/ int left = 0; int right = mid - low + 1; for(int i = 0; i < size; i++){ if(right <= high - low){ if(left <= mid - low){ if(temp[left].compareTo(temp[right]) < 0){ data[i + low] = temp[right ++ ]; }else{ data[i + low] = temp[left ++]; } }else{ data[i + low] = temp[right ++ ]; } }else{ data[i + low] = temp[left ++]; } } }
基本排序算法Java实现(2)——归并排序
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。