`

算法-希尔排序

阅读更多
package com.arithmetic.sort;
/**
 * Shell Sort 其實是對Insert Sort的優化,因為當一個初始化的數組有序或者比較有序,且數據量
 * 也不是太大的時候,可能沒啥大問題,當初始化的數組很大且雜亂無章,插入排序的時候,插入的次數就很多
 * 這樣對效率也大打折扣。所以此時Shell Sort可以 是一組數組 接近有序,然後再進行插入排序,這樣的話
 * 插入的次數就很少了
 * @author Administrator
 *
 */
public class ShellSort {
	public static void main(String[] args) {
		int [] arrays = new int[]{1002,2,989,344,24,3,15,6,909,13,12,112,56,100,67,81,671,456,23,231,34,456,567,98,123};
		//计算数组长度
		int len = arrays.length;
		//控制增量变化,变多少,自己结合实际情况而定,此处我们假设增量为5,每一次递减2,但是要确保增量最后大于0
		for(int gap = 5; gap > 0; gap -= 2){
			//我们需要从0开始,遍历数据,但是长度变量长度最好不超过(len-gap)因为超过了又是以前便利过的那一组去了
			for(int x = 0; x < len-gap; x++){
				//此时我们需要根据每一个组第一个数据,去得到该组的所有数据
				for(int y = x; y < len; y += gap){
					//开始进行插入排序
					for(int index = y; index > 0; index-=gap){
						//如果 开始位置下标小于增量,我们就跳过本次循环,否则数组下标越界
						if(index < gap){
							continue;
						}
						if(arrays[index] < arrays[index-gap]){
							int tmp = arrays[index];
							arrays[index] = arrays[index-gap];
							arrays[index-gap]= tmp;
						}
					}
				}
			}
		}
		for(int i = 0; i<arrays.length;i++){
			System.out.print(arrays[i]+" ");
		}
		System.out.println();
	}
	
}

 

分享到:
评论

相关推荐

    详解Java常用排序算法-希尔排序

    希尔排序算法详解 希尔排序(Shell Sort)是一种改进的插入排序算法,它的基本思想是将待排序的数组按照一定的间隔进行分组,对每组使用插入排序算法进行排序,然后缩小间隔,再对分组进行排序,直到间隔为1 为止。...

    基于python的排序算法-希尔排序Shell Sort

    希尔排序(Shell Sort)是一种插入排序的改进版,由Donald Shell在1959年提出。它是通过将待排序的数据序列划分为多个子序列,然后对每个子序列进行插入排序,逐渐减少子序列的间隔,直到间隔为1,即整个序列成为一...

    算法-数据结构和算法-12-希尔排序.rar

    希尔排序(Shell Sort)是一种基于插入排序的快速排序方法,由Donald Shell于1959年提出。它的主要思想是将待排序的元素按照一定的间隔分组,对每组进行插入排序,然后逐渐减小间隔,直到间隔为1,此时整个序列视为...

    经典算法的C#源码实现

    经典排序算法 - 希尔排序Shell sort 经典排序算法 - 堆排序Heap sort序 经典排序算法 - 地精排序Gnome Sort 经典排序算法 - 奇偶排序Odd-even sort 经典排序算法 - 梳排序Comb sort 经典排序算法 - 耐心排序...

    算法-理论基础- 排序- 希尔排序(包含源程序).rar

    希尔排序是一种基于插入排序的快速排序方法,由美国计算机科学家Donald Shell在1959年提出。它通过将数组中的元素按照一定的间隔分组...了解和掌握希尔排序有助于我们更好地理解和优化排序算法,提升程序的运行效率。

    基础算法-python希尔排序

    【基础算法】-python希尔排序# python实现希尔排序(插入排序的一种)# 先宏观进行调整,在进行微观调整 def shellSort(lst, k, reverse=False): length = len(lst) dk = k # 设置一个增量dk while dk &gt; 0: for i in ...

    [C++算法入门]-希尔排序

    该资源是一个入门级别的C++算法练习,旨在帮助读者学习和理解希尔排序算法。文档中包含了希尔排序的基本原理和实现方法,并提供了详细的代码示例和解析。 通过学习和完成这个练习,读者将能够掌握希尔排序算法的...

    NlogN经典排序算法的实现-希尔排序,快速排序,归并排序.zip

    **希尔排序、快速排序与归并排序:NlogN经典排序算法详解** 排序算法是计算机科学中的基础且重要的一部分,尤其是在处理大量数据时,高效排序能够显著提升程序性能。本资料包聚焦于三类时间复杂度为O(nlogn)的经典...

    C语言版的排序方法---希尔排序.docx

    希尔排序是一种基于插入排序的快速排序算法,由Donald Shell在1959年提出。它的主要特点是通过将待排序的序列分成若干个子序列来减少元素之间的比较次数,从而提高排序效率。希尔排序的核心思想是“增量序列”,即在...

    多线程排序---希尔排序、快速排序、堆排序

    本主题主要探讨了三种经典的排序算法——希尔排序、快速排序和堆排序,并在Java语言环境下通过多线程实现,以充分利用系统资源,提升排序性能。 希尔排序是一种基于插入排序的算法,由Donald Shell于1959年提出。它...

    数据结构从入门到精通-希尔排序

    数据结构从入门到精通-希尔排序

    C#算法 -- (三)希尔排序.doc

    希尔排序(Shell Sort)是一种基于插入排序的快速排序算法,由Donald Shell于1959年提出。它的主要思想是将待排序的元素按照一定的间隔分组,对每组进行插入排序,然后逐渐减小间隔,直至间隔为1,完成整个序列的...

    python-十大排序算法之希尔排序

    python python_十大排序算法之希尔排序

    Java代码-排序-直接插入排序、希尔排序、直接选择排序、冒泡排序、堆排序、快速排序、归并排序中部分排序以及算法-贪心法

    Java代码-排序-直接插入排序、希尔排序、直接选择排序、冒泡排序、堆排序、快速排序、归并排序中部分排序以及算法-贪心法,大家可以将源码下载下来进行学习,附带着注释和解释,有不理解的可以找博主一起探讨,共同...

    [Java算法-排序]希尔排序.java

    该资源提供了一份全面的指南,介绍了如何在Java中实现希尔排序。文档中涵盖了希尔排序的基本概念,包括如何对数组进行排序以及如何在Java中实现希尔排序。此外,文档还包括一个逐步指南,介绍如何在Java中实现希尔...

    算法可视化系列——排序算法——希尔排序

    希尔排序(Shell Sort)是一种基于插入排序的快速排序方法,由Donald Shell于1959年提出。它的主要思想是将待排序的数据按照一定的间隔进行分组,然后对每组...对于学习和理解排序算法,希尔排序是不可或缺的一部分。

    希尔排序算法源代码

    希尔排序(Shell Sort)是一种基于插入排序的快速排序算法,由Donald Shell于1959年提出。它的主要思想是将待排序的元素按照一定的间隔分组,对每组进行插入排序,然后逐渐减小间隔,直到间隔为1,此时整个序列视为...

    经典算法-- 排序算法介绍

    除了这些常见的排序算法,还有一些特殊的算法,比如希尔排序和堆排序,它们虽然在某些方面可能不是最优解,但具有独特的实现方式,可以提供不同的视角来理解和解决排序问题。 最后,基于模板的通用快速排序是一种...

    8.12-8.19-冒泡-选择-插入-希尔-快速-归并-基数-堆排序-排序算法Swift代码及UI演示

    4. 希尔排序(Shell Sort):希尔排序是插入排序的一种优化版本,通过间隔序列(也称为增量序列)减少元素间的比较距离,从而提高效率。其平均时间复杂度介于O(n)到O(n^2)之间。 5. 快速排序(Quick Sort):快速...

    数据结构--九种排序算法 --排序001.cpp

    此文件为数据结构中的九种排序算法,包含一些排序方法的过程,其九种排序包括:直接插入排序,折半插入排序,希尔排序,冒泡排序,快速排序,选择排序,堆排序,归并排序,基数排序!

Global site tag (gtag.js) - Google Analytics