#include <iostream>
using namespace std;
void print(int a[], int n ,int i)
{
cout<<"处理a["<<i<<"]"<<": ";
for(int j= 0; j<8; j++)
{
cout<<a[j]<<" ";
}
cout<<endl;
}
void shell_sort(int a[], int n)
{
int i, j, temp, dk;
dk = n;
while((dk/=2) > 0)
{
cout<<"步长为"<<dk<<"时候的排序过程:"<<endl;
for(i=dk; i < n; ++i) /*默认开始的时候前面是一个排好序的序列,开始时默认前面一个数是排好序*/
{
if(a[i] < a[i-dk]) /*需要插入的元素与排好序的序列最后一个元素做比较*/
/*只有不满足大小关系时才到序列中查找插入位置*/
{
temp = a[i]; /*复制为哨兵,即存储待插入元素*/
a[i] = a[i-dk]; /*首先后移一个元素*/
j = i - dk;
while(j>=0 && temp<a[j]) /*查找在有序表的插入位置,注意数组越界的判断*/
{
a[j+dk] = a[j]; /*元素后移*/
j -= dk;
}
a[j+dk] = temp; /*插入到正确位置*/
}
print(a, n, i);
}
}
}
int main()
{
int a[8] = {3, 1, 5, 7, 2, 4, 9, 6};
int i;
cout<<"初始序列: ";
for(i=0; i < sizeof(a)/sizeof(int); i++)
cout<<a[i]<<" ";
cout<<endl;
shell_sort(a, sizeof(a)/sizeof(int)); /*希尔插入排序*/
} 程序运行效果截图:原文地址:http://blog.csdn.net/laoniu_c/article/details/38556733