您的位置:首页 > 运维架构 > Shell

希尔(shell)排序

2010-11-02 00:27 169 查看
shell排序的依据:把记录分成几个交替的组,使用我们熟悉的插入排序算法对每个组进行排序。

具体做法是:先取一个小于记录数据n的数h1作为第一个增量,将记录中所有距离为h的记录分为一组并在该组内进行插入排序,然后再取小于h1的第二个增量h2,对记录中所有距离为h2的记录进行插入排序。。。以此类推,知道距离h等于1(此时等同于插入排序)。

#include "stdafx.h"
#include<iostream>
#include<iomanip>
using std::setw;
using std::cout;
using std::endl;
void shellinsert(int a[],int n,int k)
{
int i,j;
int temp;
for(i=k;i<n;i++)
{
temp=a[i];
for(j=i-k;j>=0;j-=k)
{
if(a[j]>temp)
{
a[j+k]=a[j];
}
else
break;
}
a[j+k]=temp;
}
}
void shellsort(int a[],int n)
{
int k=n/2;
for(;k>0;k/=2)
{
shellinsert(a,n,k);
print(a,n);
}
}
int _tmain(int argc, _TCHAR* argv[])
{
int arr[8]={47,33,61,82,72,11,25,47};
shellsort(arr,8);
return 0;
}


shell排序的基本特征:

shell排序不是稳定的

该算法对于初始记录不敏感,即初始记录是否有序对算法的执行效率几乎没有影响
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: