数据结构之排序算法Java实现(7)—— 插入类排序之希尔排序算法

希尔(Shell)排序算法也是对直接插入排序算法的改进,将数据分成几组,然后分别进行直接插入算法,然后再合并。

升序排序:

/**
	 * 希尔排序  
	 * 升序排序
	 */
	@Override
	public <T extends Comparable<? super T>> void sortByAsc(T[] data) {
		if(data.length <=1 || data == null){
			return;
		}
		T temp;
		int j = 0;
		/**gap为步长*/
		for(int gap = data.length/2; gap > 0; gap /= 2){
			for(int i = gap; i < data.length; i++){
				 temp = data[i];
				 /**对每一个gap进行插入排序*/
				for( j = i - gap; j >= 0; j -= gap){
					if(temp.compareTo(data[j]) < 0){
						data[j + gap] = data[j];
					}else{
						break;
					}
				}
				data[j + gap] = temp;
			}
		}
		
	}

  降序排序:

/**
	 * 希尔排序  
	 * 降序排序
	 */
	@Override
	public <T extends Comparable<? super T>> void sortByDesc(T[] data) {

		if(data.length <=1 || data == null){
			return;
		}
		T temp;
		int j = 0;
		/**gap为步长*/
		for(int gap = data.length/2; gap > 0; gap /= 2){
			for(int i = gap; i < data.length; i++){
				 temp = data[i];
				 /**对每一个gap进行插入排序*/ 
				for( j = i - gap; j >= 0; j -= gap){
					if(temp.compareTo(data[j]) > 0){
						data[j + gap] = data[j];
					}else{
						break;
					}
				}
				data[j + gap] = temp;
			}
		}
		
		
	}

  

原文地址:https://www.cnblogs.com/Gabby/p/6526432.html