`

经典之希尔排序

 
阅读更多
希尔排序

希尔排序是插入排序的一种改进,用大O表示法,其算法时间复杂度为O(nlogn)
其基本思想是:
先将整个待排元素序列分割成若干个子序列(由相隔某个“增量”的元素组成的)分别进行直接插入排序,然后依次缩减增量再进行排序,待整个序列中的元素基本有序(增量足够小)时,再对全体元素进行一次直接插入排序。因为直接插入排序在元素基本有序的情况下(接近最好情况),效率是很高的,接近O(n),因此希尔排序在时间效率上比插入排序有较大提高。

希尔排序java实现:
/**
 * shell sort is an improved insertion sort
 */
public class ArrayShell {
	private long[] a;
	private int nElement;
	public ArrayShell(int max) {
		this.a = new long[max];
		this.nElement = 0;
	}
	public void shellSort(){
		int outer,inner;
		//calculate the initial value of sort interval
		int h=1;
		while(h<=nElement/3){
			h=h*3+1;
		}
		while(h>0){
			for(outer=h;outer<nElement;outer++){
				long temp = a[outer];//挖走outer,放到temp里
				inner = outer;//初始化inner为outer索引
				while(inner>h-1 && a[inner-h]>temp){//增量h的左边那个大,
					a[inner] = a[inner-h];//把左边大的填到挖走的地方
					inner -= h;//把inner指向左边被挖走的大的地方
				}
				a[inner] = temp;//把temp填到左边被挖走的大的地方
			}
			h=(h-1)/3;//减小增量h
		}
	}
	public void insert(long v){
		a[nElement++]=v;
	}
	public void display(){
		for(int i=0;i<nElement;i++){
			System.out.print(a[i]+"\t");
		}
		System.out.print("\n");
	}
	
}


直接插入排序基本思想:
每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子序列中的适当位置,直到全部记录插入完成为止。
直接插入排序java实现:

public class ArrayIns {
	private long[] a;
	private int nElement;
	public ArrayIns(int max) {
		a= new long[max];
		nElement = 0;
	}
	
	public void insertionSort(){
		int out,in;
		for(out=1;out<nElement;out++){
			if(a[out-1]>a[out]){
				long temp = a[out];
				for(in = out-1;in>=0 && temp<a[in];in--){
					a[in+1]=a[in];
				}
				a[in+1]=temp;
			}
		}
	}
	public void insert(long v){
		a[nElement++]=v;
	}
	public void display(){
		for(int i=0;i<a.length;i++){
			System.out.print(a[i]+"\t");
		}
		System.out.print("\n");
	}
}
分享到:
评论

相关推荐

    希尔排序算法源代码

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

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

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

    C语言_希尔排序希尔排序

    希尔排序(Shell Sort)是由Donald Shell在1959年提出的一种基于插入排序的改进算法。它的主要思想是通过设置一系列的增量序列,逐步减少这些增量,将待排序的元素进行分组,然后在每个小组内进行直接插入排序。这个...

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

    ### 希尔排序法(希尔插入排序,希尔交换排序) #### 一、希尔排序法简介 ...总之,希尔排序作为一种经典的排序算法,虽然不如快速排序和归并排序那样广泛使用,但在特定场景下仍具有不可替代的作用。

    插入排序之希尔排序.cpp

    插入排序之希尔排序

    经典排序算法(希尔 冒泡 插入 选择)

    【希尔排序】希尔排序是一种基于插入排序的快速排序算法,由希尔(Hoare)提出。它的主要思想是将待排序的元素按照一定的间隔分组,然后对每组进行插入排序,随着间隔逐渐减小,最后当间隔为1时,整个序列就是一个有序...

    合并排序,插入排序,希尔排序,快速排序,冒泡排序,桶排序的C语言实现

    本文将详细讲解六种经典的排序算法——合并排序、插入排序、希尔排序、快速排序、冒泡排序以及桶排序,并结合提供的文件名(sort.c、set.c、main.c、set.h、sort.h)推测出每个文件可能包含的代码实现。 1. **合并...

    《快速排序 直接插入排序 堆排序 希尔排序 选择排序:五种排序》

    (1) 完成5种常用内部排序算法的演示,5种排序算法为:快速排序,直接插入排序,选择排序,堆排序,希尔排序; (2) 待排序元素为整数,排序序列存储在数据文件中,要求排序元素不少于30个; (3) 演示程序开始,...

    希尔排序java代码

    希尔排序(Shell Sort)是一种基于插入排序的快速排序算法,由Donald Shell于1959年提出。它的主要思想是将待排序的数据按照一定的增量分组,对每组使用直接插入排序,然后逐渐减小增量,继续进行分组排序,直到增量...

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

    希尔排序(Shell Sort)是一种基于插入排序的快速排序方法,由Donald Shell于1959年提出。它的主要思想是将待排序的数据按照一定的间隔进行分组,然后对每组进行插入排序,随着间隔逐渐缩小,最后进行一次全排列,...

    希尔排序基本思想

    希尔排序是一种基于插入排序的快速排序算法,由Donald Shell在1959年提出。它的主要特点是通过将待排序的数组元素按照一定的间隔分组,然后对每组进行插入排序,随着间隔逐渐减小,直到间隔为1时,整个数组成为一个...

    希尔排序,冒泡排序,堆排序等各种排序算法

    本主题将详细探讨希尔排序、冒泡排序、堆排序等经典的排序算法,这些都是数据结构与算法学习中的核心内容,尤其对于北邮数据结构课程来说,理解并掌握这些排序方法至关重要。 1. **插入排序**: 插入排序是一种...

    希尔排序C语言实现

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

    内部排序 希尔排序和直接插入排序的比较

    ### 直接插入排序与希尔排序的比较 #### 一、概述 本篇文章将通过一组具体的数据集(8个整数)对直接插入排序(Direct Insertion Sort)和希尔排序(Shell Sort)这两种排序方法进行深入分析和比较。这两种排序...

    希尔排序(程序).txt

    ### 希尔排序原理与实现 #### 一、希尔排序简介 希尔排序(Shell Sort)是一种基于插入排序的高效算法。它通过将原始数组分割成多个子序列来进行排序,从而提高了插入排序的效率。希尔排序的核心思想是通过将相隔...

    数据结构——希尔排序

    希尔排序,又称希尔斯排序,是由美国计算机科学家Donald Shell于1959年提出的一种基于插入排序的快速排序算法。这种排序方法通过设置一个增量序列,将待排序数组分割成若干个子序列,然后对每个子序列进行插入排序。...

    插入排序和希尔排序代码

    希尔排序首先选择一个较大的增量,对数组进行插入排序,然后逐渐减小增量,再次对数组进行插入排序,直到增量为1,这时数组的每个元素间隔为1,相当于进行了一次插入排序,整个数组已经基本有序。在给出的`...

    基数排序、堆排序、希尔排序、直接插入排序

    这里我们将深入探讨四种常见的排序算法:基数排序、堆排序、希尔排序和直接插入排序。 首先,基数排序是一种非比较型整数排序算法,它的基本思想是将整数按位数切割成不同的数字,然后按每个位数分别比较。基数排序...

    数据结构 综合排序 冒泡排序 直接插入排序 快速排序 希尔排序等等

    根据提供的文件信息,我们可以深入探讨几种经典的排序算法:冒泡排序、直接插入排序、快速排序以及希尔排序。这些算法在数据结构与算法课程中是非常重要的基础内容,它们各自有着独特的特性和应用场景。 ### 1. ...

    希尔排序的代码

    ### 希尔排序算法详解 #### 算法概述 希尔排序(Shell Sort),又称为缩小增量排序,是插入排序的一种更高效的改进版本。它由Donald Shell在1959年提出。希尔排序的基本思想是:将待排序列分割成若干子序列分别...

Global site tag (gtag.js) - Google Analytics