希尔排序的思想:又称为缩小增量排序,将待排序列的数据元素分成若干个小组,对于同一个小组内进行直接插入排序。
增量逐渐缩小,当增量为1时。排序完成。
例如:
代码:
void Shell(int arr[], int len, int width)//与直接插入排序类似
{
int i = width;
int j ;
for (; i < len; i++)
{
int temp = arr[i];
for (j = i- width; j >= 0; j -= width)
{
if (arr[j] > temp)
{
arr[j + width] = arr[j];
}
else
{
break;
}
}
arr[j + width] = temp;
}
}
void Shell_sort(int arr[], int len)//按照不同增量进行排序
{
int d[] = {5,3,1};//增量数组
int lenth = sizeof(d) / sizeof(d[0]);
for (int i = 0; i < lenth; i++)
{
Shell(arr, len, d[i]);
}
}
void main()
{
int arr[] = { 65,42,34,45,66,77};
int len = sizeof(arr) / sizeof(arr[0]);
Shell_sort(arr, len);
for (int i = 0; i<len; ++i)
{
cout << arr[i] << " ";
}
}
注意:Shell_sort的外层循环i每次加1;我编写的时候错写成i+width。