首页 > 编程语言 > 详细

Java排序算法(四):希尔排序

时间:2015-03-12 22:40:48      阅读:349      评论:0      收藏:0      [点我收藏+]

[基本思想]

将原本有大量记录数的记录进行分组,分割成若干个子序列,此时每个子序列待排序的记录个数就比较少了,然后在这些子序列内分别进行直接插入排序,当整个序列都基本有序时,再对全体记录进行一次直接插入排序。

所谓的基本有序,就是小的关键字基本在前面,大的基本在后面,不大不小的基本在中间,像{2, 1, 3, 6, 4, 7, 5, 8, 9}这样可以称为基本有序了。


[java实现]

public class ShellSort {

	public static void main(String[] args) {
		int[] arr = { 6, 5, 3, 1, 8, 7, 2, 4 };
		System.out.println("排序之前:");
		for (int i = 0; i < arr.length; i++) {
			System.out.print(arr[i] + " ");
		}

		// 希尔排序
		shellSort(arr);

		System.out.println();
		System.out.println("排序之后:");
		for (int i = 0; i < arr.length; i++) {
			System.out.print(arr[i] + " ");
		}
	}

	/**
	 * 希尔排序
	 */
	private static void shellSort(int[] arr) {
		int j;
		for (int gap = arr.length / 2; gap > 0; gap = gap / 2) {
			for (int i = gap; i < arr.length; i++) {
				int tmp = arr[i];
				for (j = i; j >= gap && tmp < arr[j - gap]; j = j - gap) {
					arr[j] = arr[j - gap];
				}
				arr[j] = tmp;
			}
		}
	}

}
[算法说明]

希尔排序时间复杂度:O(nlogn)

希尔排序并不是一种稳定的排序算法。

Java排序算法(四):希尔排序

原文:http://blog.csdn.net/zdp072/article/details/44227163

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!