原理:shell排序的思想是根据步长由长到短分组,进行排序,直到步长为1为止,属于插入排序的一种。
关于动画演示可以查看点击打开链接
#include<iostream>
using namespace std;
int main()
{
void shellsort(int a[], int n);
int a[10] ={9,3,4,5,8,1,6,2,7,0};
shellsort(a, 10);
for (int i=0; i<=9;i++)
{
cout<<a[i]<<' ';
}
cout<<endl;
return 0;
}
void shellsort(int v[], int n)
{
int gap, i , j, temp;
for (gap = n/2; gap > 0; gap /= 2)
{
for (i=gap; i < n; i++)
{
for(j=i-gap; j>=0 && v[j]>v[j+gap]; j-=gap)
{
temp=v[j];
v[j]=v[j+gap];
v[j+gap]=temp;
}
}
}
}
// /* shellsort: sort v[0]...v[n-1] into increasing order */
// void shellsort(int v[], int n)
// {
// int gap, i, j, temp;
// for (gap = n/2; gap > 0; gap /= 2)
// {
// for (i = gap; i < n; i++)
// {
// for (j=i-gap; j>=0 && v[j]>v[j+gap]; j-=gap)
// {
// temp = v[j];
// v[j] = v[j+gap];
// v[j+gap] = temp;
// }
// }
// }
//}