`
diaoaa
  • 浏览: 18610 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

希尔排序算法

 
阅读更多

1、描述:希尔排序(查看定义)是直接插入排序的一种扩展算法,对于一个有序序列或者基本有序序列,要在插入一个较小的元素的时候就要从后向前(查看原因)不断的移动,如果序列是相当大的,这种移动是十分耗时的。改进的办法就是将每次从后向前移动的步长增大,这样移动比较的次数就会大大的减少。步长的计算一般由公式:h = 3*h+1算出,步长由大逐渐减少至1,当减到1的时候,也就是一般的直接插入排序了,但这个时候序列是相对有序的,保证了相对较小的元素不会出现在序列的最后面,从而减少了移动的次数。

2、Java代码实现

public class ShellSort2 {
	
	public static void main(String[] args) {
		int a[] = {-5,6,0,4,-1,7,8,26,10,-9};
		shell0405(a);
		String str ="";
		for(int k=0;k<a.length;k++){
			str += a[k] + ",";
		}
		System.out.println(str);
	}
	
	public static void shell0405(int[] a){
		int h = 1;
		int temp;
		int j;
		while(h<a.length/3){
			h = h*3 + 1; 
		}
		while(h>0){
			for(int i=h;i<a.length;i++){
				if(a[i]<a[i-h]){
					temp = a[i];
					j = i;
					do{
						a[j] = a[j-h];
						j -= h;
					}while(j-h>=0&&a[j-h]>temp);
					a[j] = temp;
				}
			}
			h = (h-1)/3;
		}
	}


分享到:
评论

相关推荐

    数据结构之希尔排序算法程序

    在提供的“希尔排序算法.c”文件中,我们可以预期看到以下关键代码结构: 1. **初始化增量**:定义初始增量,通常为序列长度的一半。 2. **循环处理**:根据增量序列进行循环,每次循环内部: - **分组**:根据...

    分别使用Java和Python实现希尔排序算法

    希尔排序:分别使用Java和Python实现希尔排序算法 希尔排序:分别使用Java和Python实现希尔排序算法 希尔排序:分别使用Java和Python实现希尔排序算法 希尔排序:分别使用Java和Python实现希尔排序算法 希尔排序:...

    希尔排序法(希尔插入排序,希尔交换排序)

    希尔排序法是计算机科学领域中一种重要的排序算法,它由美国计算机科学家Donald Shell于1959年提出,因此得名希尔排序。希尔排序是一种基于插入排序的改进算法,通过将待排序序列分为若干个子序列进行独立排序来提高...

    希尔排序算法源代码

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

    python数据结构与算法分析,希尔排序法实现,希尔排序.py

    python数据结构与算法分析,希尔排序法实现,希尔排序.py

    C语言实现希尔排序算法

    希尔排序(Shell Sort)是一种基于插入排序的快速排序方法,由Donald Shell于1959年提出。它的基本思想是将待排序的元素按照...在C语言中,希尔排序通常作为一个基础的排序算法实现,用于教学和理解排序算法的原理。

    c++希尔排序算法实现源代码 原创

    希尔排序(Shell Sort)是一种基于插入排序的快速排序算法,由Donald Shell于1959年提出。它的主要思想是将待排序的数据按照一个增量序列分成若干个子序列,然后分别对子序列进行插入排序,最后再进行一次全局的插入...

    数据结构的希尔排序算法

    通过这个程序就可以实现希尔排序,对数据用希尔进行排序

    希尔排序算法解说,动画演示

    这是希尔排序算法的一个关键特点。 希尔排序的时间复杂度为O(n^2),但实际上它的性能比插入排序要好得多,特别是在大型列表上。希尔排序的性能取决于间隔序列的选择,但是目前还没有一种最优的间隔序列。

    希尔排序算法Java简单解释

    希尔排序是一种比较实用的排序算法,虽然它不是稳定的排序算法(即相等的元素可能会改变原有的相对顺序),但其效率在许多情况下优于其他简单的排序算法,特别是在处理大规模数据时。在编程实践中,理解并掌握希尔...

    直接排序法,折半插入法,希尔排序法,快速排序法(c语言实现)

    希尔排序是一种基于插入排序的算法,通过将待排序的数组元素按某个增量分组,然后对每组使用直接插入排序算法排序。随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止...

    C语言希尔排序算法实现

    C语言版的希尔排序算法,可以有按照升序、降序两种方式进行排序

    C#实现希尔排序算法.

    尽管希尔排序不是稳定的排序算法(即相等的元素可能会改变原有的相对顺序),但其高效性和灵活性使其在实际应用中仍有一定价值。 在C#中实现希尔排序,首先需要理解C#的基本语法和数据结构。C#是一种面向对象的编程...

    常见经典排序算法(C语言)1希尔排序 二分插入法 直接插入法 带哨兵的直接排序法 冒泡排序 选择排序 快速排序 堆排序.docx

    常见的经典排序算法有希尔排序、二分插入法、直接插入法、带哨兵的直接排序法、冒泡排序、选择排序、快速排序、堆排序等。 一、希尔排序(Shell 排序法) 希尔排序法,又称宿小增量排序,是 1959 年由 D.L.Shell ...

    希尔排序算法python实现,可实现动态图实现

    希尔排序算法python实现,可实现动态图实现,算法详细书名:https://blog.csdn.net/qq_28531269/article/details

    使用希尔排序法对一维数组进行排序

    希尔排序(Shell Sort)是一种基于插入排序的快速排序算法,由Donald Shell于1959年提出。它的主要思想是将待排序的数据按照一个增量序列分成若干子序列,然后对每个子序列进行插入排序,最后逐步减小增量,直至增量...

    C#使用希尔排序法对一维数组进行排序

    希尔排序(Shell Sort)是一种基于插入排序的快速排序算法,由Donald Shell于1959年提出。它的主要思想是将待排序的数据按照一个增量序列分成若干个子序列,然后分别对子序列进行插入排序,最后减小增量,再进行排序...

    Java实现希尔排序算法(源代码)

    ### Java实现希尔排序算法 #### 实现原理 希尔排序(Shell Sort)是插入排序的一种高效改进版本,也称为缩小增量排序。它的基本思想是:先将整个待排序的记录序列分割成为若干子序列(由相隔某个“增量”的记录...

    排序算法 希尔排序 C++

    数据结构排序算法中的希尔(shell)排序,可供初学者参考

Global site tag (gtag.js) - Google Analytics