排序算法笔记:希尔排序 ShellSort in java

/**
 * 希尔排序
 * 简述:
 * 		希尔排序是插入排序的一种改进。将需要排序的序列划分成为若干个较小的子序列,对子序列进行插入排序,通过则插入排序能够使得原来序列成为基本有序。
 * 时间复杂度:
 * 	
 * 空间复杂度:
 *		
 * 优点:
 * 		
 * 缺点:
 * 		
 * 可改进:
 * 		
 * @author CheN
 * 
 */
public class ShellSort {
	
	/**
	 * 正序
	 * @param array
	 * @return
	 */
	public static int[] asc(int[] array) {
		return sort(array, array.length);
	}

	/**
	 * 希尔排序
	 * @param array
	 * @param length
	 * @return
	 */
	private static int[] sort(int[] array, int length) {
		int step = length / 2; // 设置希尔排序的增量
		// 增量必须为1,才可得到完整的排序
		while (step >= 0) {
			// 
			for(int i = step ; i < length ; i++) {
				// 从每一组数字的第二个数字开始,与前面的每一个数字进行比较,如果小,则插入。然后再用该组后续的数字与前面的数字进行比较,再交换。
				int temp = array[i];
				int j = i - step;
				while (j >= 0 && array[j] > temp) {
					array[j + step] = array[j];
					j = j - step;
				}
				array[j + step] = temp;
			}
			step = step / 2; // 缩小增量
		}
		return array;
	}
}

 

若有错误或不妥之处,敬请谅解并指点。

 

你可能感兴趣的:(算法,排序,shell,希尔排序,sort,ShellSort)