希尔排序算法实现(C++)

原创 2012年03月25日 21:51:19

希尔排序是一种按照增量排序的方法。其中增量值是小于n的正整数。

  shell排序的基本思想[1]是:

    先取一个小于n的整数d1作为第一个增量,把文件的全部记录分成d1个组。所有距离为dl的倍数的记录放在同一个组中。先在各组内进行直接插人排序;然后,取第二个增量d2<d1重复上述的分组和排序,直至所取的增量dt=1(dt<dt-l<…<d2<d1),即所有记录放在同一组中进行直接插入排序为止。

可以根据百度百科中提供的图来直观的看一下:


(1)初始增量为3,该数组分为三组分别进行排序。(初始增量值原则上可以任意设置(0<gap<n),没有限制)

(2)将增量改为2,该数组分为2组分别进行排序。

(3)将增量改为1,该数组整体进行排序。

下面是根据该数组实现的代码:

#include <iostream>

using namespace std;

int a[] = {70,30,40,10,80,20,90,100,75,60,45};

void shell_sort(int a[],int n);
int main()
{
	cout<<"Before Sort: ";
    for(int i=0; i<11; i++)
		 cout<<a[i]<<" ";
	  cout<<endl;
	  shell_sort(a, 11);
   cout<<"After Sort: ";
	  for(int i=0; i<11; i++)
		  cout<<a[i]<<" ";
	  cout<<endl;
	 system("pause");
}

void shell_sort(int a[], int n)
{
	int gap;
	for(gap = 3; gap >0; gap--)
	{
		for(int i=0; i<gap; i++)
		{
			for(int j = i+gap; j<n; j=j+gap)
			{
				if(a[j]<a[j-gap])
				{
					int temp = a[j];
					int k = j-gap;
					while(k>=0&&a[k]>temp)
					{
						a[k+gap] = a[k];
						k = k-gap;
					}
					a[k+gap] = temp;
				}
			}
		}
	}
}


[1]百度百科  http://baike.baidu.com/view/549624.htm


c++实现希尔排序

希尔排序(Shell Sort),也称为递减增量排序算法,是插入排序的一种高速而稳定的改进版本。希尔排序是基于插入排序的以下两点性质而提出改进方法的:1.插入排序在对几乎已经排好序的数据操作时,效率高...
  • jx232515
  • jx232515
  • 2016年05月31日 17:29
  • 739

希尔排序的C++实现

感谢博主 http://www.cnblogs.com/90zeng/p/shell_sort.html 1.原理介绍 希尔排序又称为缩小增量排序,由D.L.Shell在1959年提出...
  • xinpo66
  • xinpo66
  • 2015年01月13日 12:10
  • 1888

希尔排序C++

/* * shell_sort.cpp * * Created on: 2016-3-19 * Author: LvLang */ //希尔排序C++ #include us...
  • Lv_Victor
  • Lv_Victor
  • 2016年03月19日 11:42
  • 420

C++版本的希尔排序

前面三种排序算法(冒泡、选择以及插入排序)的时间复杂度都是O(n2n^{2}),相对来说性能最好的是插入排序,在元素个数少,且原序列基本有序的前提下,是非常高效的!所以对于人一个无序序列,我们可以认为...
  • lzjsqn
  • lzjsqn
  • 2016年11月13日 21:37
  • 181

希尔排序 原理及实现

http://blog...sina...com...cn/s/blog_6d88423901014vai.html 原理 #include #include #include #includ...
  • u014713819
  • u014713819
  • 2014年04月27日 21:33
  • 1364

数据结构 - 希尔排序(Shell's Sort) 详解 及 代码(C++)

数据结构 - 希尔排序(Shell's Sort) 详解 及 代码(C++) 本文地址: http://blog.csdn.net/caroline_wendy/article/details/2...
  • u012515223
  • u012515223
  • 2014年04月23日 14:37
  • 2758

C++ 实现的简单的希尔排序的算法

  • 2010年10月11日 11:28
  • 612B
  • 下载

C/C++十大经典排序算法之希尔排序

 声明: 1、读者莫要看到大量的代码就晕头,其实核心的语句就那么几句,详细请看代码说明 2、关于希尔排序相关概念及文字描述,请百度百科 代码说明: 1、小编为了方便监...
  • RicardoMTan
  • RicardoMTan
  • 2017年04月28日 00:31
  • 338

C++实现谢尔排序(希尔排序)(shell sort)

谢尔排序和插入排序还是有类似的,可以说插入排序是谢尔排序中必经的一步,或者说是特殊的一种情况。因为谢尔排序需要使用一个增量序列hkh_k, k=1,2,3,...,tk=1,2,3,...,t,其中h...
  • cjbct
  • cjbct
  • 2017年01月08日 21:27
  • 458

7种常用排序算法实现(C++)(冒泡排序、选择排序、直接插入排序、希尔排序、堆排序、归并排序以及快速排序)

  • 2014年04月11日 22:46
  • 525KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:希尔排序算法实现(C++)
举报原因:
原因补充:

(最多只允许输入30个字)