希尔排序算法实现(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++实现

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

c++实现希尔排序

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

希尔排序 原理及实现

http://blog...sina...com...cn/s/blog_6d88423901014vai.html 原理 #include #include #include #includ...

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

希尔排序是一种按照增量排序的方法。其中增量值是小于n的正整数。   shell排序的基本思想[1]是:     先取一个小于n的整数d1作为第一个增量,把文件的全部记录分成d1个组。所有距离为dl...

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

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

C++版本的希尔排序

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

各种内排序算法的C++实现(不断更新中)

一.插入排序(insert sorting)#include using namespace std;/*交换函数,作用是交换数组中的两个元素的位置*/void swap(int array[],in...

白话经典算法系列之三 希尔排序的实现

希尔排序的实质就是分组插入排序,该方法又称缩小增量排序,因DL.Shell于1959年提出而得名。   该方法的基本思想是:先将整个待排元素序列分割成若干个子序列(由相隔某个“增量”的元素组成的)分别...

希尔排序的算法思想与实现

希尔排序基本思想:   先取一个小于n的整数d1作为第一个增量,把文件的全部记录分成d1个组。所有距离为d1的倍数的记录放在同一个组中。先在各组内进行直接插入排序;然后,取第二个增量d2  该方法实质...

排序算法系列---希尔排序(C++)

希尔排序:明白它的原理之后,希尔算法其实就是更加先进的一种插入排序,之前的直接插入排序是逐个比较,找到合适的位置就插入,希尔排序是跳跃式的插入,拿当前的数和n(自己定义的跳跃数)个之前的数比较,较小的...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:希尔排序算法实现(C++)
举报原因:
原因补充:

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