zoukankan      html  css  js  c++  java
  • 数据结构之排序算法Java实现(11)——合并排序之 归并排序算法

    归并排序:升序排

    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编程题古典算法之兔子问题
    java基础之final关键字
    java基础之final关键字
    java基础之静态代码块,局部代码块,构造代码块区别。
    java基础之静态代码块,局部代码块,构造代码块区别。
    java基础之完数判断
    java基础之完数判断
    java基础之二维数组不定义列数
    正则表达式快速入门
    深入理解JSON对象
  • 原文地址:https://www.cnblogs.com/Gabby/p/6522989.html
Copyright © 2011-2022 走看看