java希尔排序

/**
 * 希尔排序
 * 就是将源序列按照步长分组,然后对子序列进行插入排序,逐渐减少步长直至步长为1
 * 
 * @author bobo
 * 
 */
public class ShellSort {
	public static void main(String[] args) {
		int[] a = { 7, 6, 5, 4, 3, 2, 1 };
		show(a);
		sheelSort(a, 3);
		show(a);
		sheelSort(a, 1);
		show(a);
	}

	/**
	 * 希尔排序核心算法
	 * 
	 * @param a
	 * @param dk
	 *            步长
	 */
	private static void sheelSort(int[] a, int dk) {
		// 分组数量等于步长数
		for (int i = 0; i < dk; i++) {
			for (int j = i; j < a.length; j = j + dk) {
				System.out.print(a[j] + " ");
			}
			System.out.println();
			for (int j = i; j < a.length; j = j + dk) {
				if (j >= dk) {
					for (int n = i; n < j; n = n + dk) {
						if (a[j] < a[n]) {
							int temp = a[j];
							for (int k = j; k > n; k = k - dk) {
								a[k] = a[k - dk];
							}
							a[n] = temp;
						}
					}
				}
			}
			// 显示一组排完之后的数据
			System.out.println("\n排序后");
			for (int j = i; j < a.length; j = j + dk) {
				System.out.print(a[j] + " ");
			}
			System.out.println();
		}

	}

	private static void show(int[] a) {
		// TODO Auto-generated method stub
		for (int i = 0; i < a.length; i++) {
			System.out.print(a[i] + " ");
		}
		System.out.println();
	}
}

 

 

你可能感兴趣的:(java)