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 ++];
    			}
    		}
    		
    	}
    

      

  • 相关阅读:
    IOC容器特性注入第六篇:利用MVC注入点,把容器启动
    IOC容器特性注入第五篇:查找(Attribute)特性注入
    以女朋友为例讲解 TCP/IP 三次握手与四次挥手
    Kali信息收集
    Python3 异常处理
    Python3 hasattr()、getattr()、setattr()、delattr()函数
    Python3 常用模块
    Python设计模式——外观模式
    Python设计模式——模版方法模式
    一个很神奇的类
  • 原文地址:https://www.cnblogs.com/Gabby/p/6522989.html
Copyright © 2011-2022 走看看