最近在和师兄探讨希尔排序的实现原理,得到了师兄的点拨。 进入正题,讲希尔排序首先就要将插入排序,插入排序的原理很简单:给定数组a的[ first,last)区间,经过 i-1次排序之后,a[first]...a[first+i-1]已排好序。第 i 遍处理就是将 a[first+i]插入到a[fi....
分类:
编程语言 时间:
2015-10-27 21:46:39
阅读次数:
239
希尔排序 ????????希尔排序是计算机科学家Donald L.Shell 而得名,他在1959年发现了希尔排序算法。希尔排序基于插入排序,但是增加了一个新的特性,大大提高了插入排序的执行效率。 ????插入排序:复...
分类:
编程语言 时间:
2015-10-26 00:44:45
阅读次数:
200
希尔排序源代码如下:
#include
//希尔排序
void shellSort(int a[],int l, int r){ //一次排序同一步长所组成的集合 如a[0],a[5],a[10]...
int i,j,h;
for(h=1;h0;h/=3)
f...
分类:
编程语言 时间:
2015-08-16 12:27:07
阅读次数:
116
希尔排序同之前介绍的直接插入排序一起属于插入排序的一种。希尔排序算法是按其设计者希尔(Donald Shell)的名字命名,该算法由1959年公布,是插入排序的一种更高效的改进版本。它的作法不是每次一个元素挨一个元素的比较。而是初期选用大跨步(增量较大)间隔比较,使记录跳跃式接近它的排序位置;然后增量缩小;最后增量为 1 ,这样记录移动次数大大减少,提高了排序效率。希尔排序对增量序列的选择没有严格规...
分类:
编程语言 时间:
2015-08-13 12:14:05
阅读次数:
167
#include<stdio.h>#definemax100//数组大小voidshellsort(int*a,intn)
{
intdelta,i,j;for(delta=n/2;delta>0;delta/=2)
{
for(i=delta;i<n;i++)
{
inttemp=a[i];for(j=i-delta;j>=0;j-=delta)
{
if(temp<a[j])a[j+delta]=a[j];elsebreak;
}
a[j+delta]=temp..
分类:
编程语言 时间:
2015-08-09 10:59:37
阅读次数:
137
#include<stdio.h>#definemax100//数组大小voidshellsort(int*a,intn)
{
intdelta,i,j;for(delta=n/2;delta>0;delta/=2)
{
for(i=delta;i<n;i++)
{
inttemp=a[i];for(j=i-delta;j>=0;j-=delta)
{
if(temp<a[j])a[j+delta]=a[j];elsebreak;
}
a[j+delta]=temp..
分类:
编程语言 时间:
2015-08-09 10:55:19
阅读次数:
131
static void shell_sort(int[] unsorted, int len) { int group, i, j, temp; for (group = len / 2; group > 0; group /= 2) ...
分类:
编程语言 时间:
2015-08-07 01:47:41
阅读次数:
126
希尔排序思想:使数组中任意间隔为h的元素都是有序的。...
分类:
编程语言 时间:
2015-07-23 17:45:32
阅读次数:
133
内部排序算法总结:排序算法有各自的时间复杂度,并不代表时间复杂度高的算法在任何情况下就比时间复杂度低的算法要低效,相反也一样。排序算法按照其最基本的操作可以分为以下几种类型:插入类排序算法直接插入排序算法折半插入排序算法希尔排序算法选择类排序算法简单选择排序算法堆排序交换类排序算法冒泡排序快速排序1...
分类:
编程语言 时间:
2015-07-20 23:08:18
阅读次数:
147
1.算法介绍 先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,待整个序列中的记录“基本有序”时,再对全体记录进行依次直接插入排序。2.算法原理 先将要排序的一组记录按某个增量d(n/2,n为要排序数的个数)分成若干组子序列,每组中记录的下标相差d.对每组中全部元素进行直接插入排序.....
分类:
编程语言 时间:
2015-07-12 20:14:46
阅读次数:
150