程序员需要掌握的排序算法之希尔排序(最小增量排序)

希尔排序(最小增量排序)

基本思想:希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。

package sortalgorithm;

public class PublicShellSort {

	static void shellSort() {

		int[] sortList = { 1, 3, 2, 4, 10, 7, 8, 9, 5, 6 };
		int n = 1,len = sortList.length;
		for (int step = len / 2; step > 0; step /= 2) {
			for (int i = 0; i < step; i++) {
				for (int j = i + step; j < len; j += step)
					if (sortList[j] < sortList[j - step]) {
						//如果后面的数大于前面的数,则两两进行交换
						int temp = sortList[j];
						int k = j - step;
						while (k >= 0 && sortList[k] > temp) {
							sortList[k + step] = sortList[k];
							k -= step;
						}//该循环是位移式
						sortList[k + step] = temp;
					}
			}
			System.out.println("第" + n + "次:");
			for (int m = 0; m < sortList.length; m++) {
				System.out.print(sortList[m] + " ");
			}
			System.out.println();
			n++;
		}
		System.out.println("最终:");
		for (int k = 0; k < sortList.length; k++) {
			System.out.print(sortList[k] + " ");
		}
	}

	public static void main(String[] args) {
		shellSort();
	}
}

  

 运行结果:

原文地址:https://www.cnblogs.com/liucldq/p/8532459.html

时间: 2024-10-10 11:12:40

程序员需要掌握的排序算法之希尔排序(最小增量排序)的相关文章

【程序员眼中的统计学(5)】排列组合:排序、排位、排

排列组合:排序.排位.排 作者 白宁超 2015年10月15日18:30:07 摘要:程序员眼中的统计学系列是作者和团队共同学习笔记的整理.首先提到统计学,很多人认为是经济学或者数学的专利,与计算机并没有交集.诚然在传统学科中,其在以上学科发挥作用很大.然而随着科学技术的发展和机器智能的普及,统计学在机器智能中的作用越来越重要.本系列统计学的学习基于<深入浅出统计学>一书(偏向代码实现,需要读者有一定基础,可以参见后面PPT学习).正如(吴军)先生在<数学之美>一书中阐述的,基于统

排序算法之希尔排序

文章转载自http://www.cnblogs.com/chengxiao/ 希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法.希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序,同时该算法是冲破O(n2)的第一批算法之一.本文会以图解的方式详细介绍希尔排序的基本思想及其代码实现. 希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序:随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组

【排序算法】用C++实现各种排序算法

1. 在平时的学习中,很经常听到各种排序算法,各自有其优缺点.尝试自己用C++实现各排序算法,作为对算法的基础学习. 常见的内部排序: 插入排序 冒泡排序 选择排序 快速排序 堆排序 归并排序 基数排序 希尔排序 [排序算法]用C++实现各种排序算法

经典排序算法之希尔排序

? 希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法.希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序,同时该算法是冲破O(n2)的第一批算法之一.希尔排序适合数据量中等情况,几十个到几万个. ? 网上看了好久才彻底明白希尔排序是什么,简单的说将就是按照步进对数据进行分组,对每组分别进行插入排序,直到步进是1的时候则全部完成.在此感谢 dreamcatcher-cx的博客 的讲解. function sortShell(arr)

插入排序) 希尔排序 (最小增量排序)

/** * (插入排序) 希尔排序 (最小增量排序) * @author Cinn * */public class shellSort { /**     * @param args     */    public static void main(String[] args) {        // TODO Auto-generated method stub        int[] array= {48,58,50,98,69,51,27,99,100};        shlees

iOS 程序员必须掌握的核心算法有哪些?

由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?, 说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法.这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍.下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过不错的文章给大家.大家也可以留言区补充. 一.算法最最基础 1.时间复杂度 2.空间复杂度 一般最

程序员常用的10个算法

1.二分查找算法(非递归)  此篇写的是非递归算法,递归的在之前的查找算法中写过了. 1.1 算法的适用条件 二分查找只适用于从有序的数列中进行查找(比如数字和字母等),将数列排序后在查找. 1.2算法的效率: 时间复杂度为O(log2 n) 实例:使用二分查找的非递归形式对数组{1 3 8 10  11 67 100}进行查找 public class BinarySearchNoRecur { public static void main(String[] args) { //测试 int

每个程序员都应该收藏的算法复杂度速查表

算法复杂度这件事 这篇文章覆盖了计算机科学里面常见算法的时间和空间的大 O(Big-O)复杂度.我之前在参加面试前,经常需要花费很多时间从互联网上查找各种搜索和排序算法的优劣,以便我在面试时不会被问住.最近这几年,我面试了几家硅谷的初创企业和一些更大一些的公司,如 Yahoo.eBay.LinkedIn 和 Google,每次我都需要准备这个,我就在问自己,“为什么没有人创建一个漂亮的大 O 速查表呢?”所以,为了节省大家的时间,我就创建了这个,希望你喜欢! — Eric 图例 绝佳 不错 一般

程序员必须掌握的核心算法有哪些?

由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法.这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍.下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过不错的文章给大家.大家也可以留言区补充. 一.算法最最基础 1.时间复杂度 2.空间复杂度 一般最先