希尔排序的原理:
(1)首先,从数组的首元素开始每隔“步长(间隔)”个元素就挑选一个元素出来作为子数组元素。
(2)然后每个子数组各自进行比较,比较好后,每个子数组都有顺序,进入下一轮,步长(间隔)减少,
再根据步长(间隔)分组进行比较。
(3)重复以上操作,最后就有顺序了。
#include <iostream>
#include <stdlib.h>
using namespace std;
/*******************************************/
/* 希尔排序
/******************************************/
void ShellSort(int array[], int n) //希尔排序函数
{
int i, j, step;
for (step = n / 2; step > 0; step = step / 2) //这里的step步长是根据10个元素这种情况定义的
{
for (i = 0; i < step; i++) //i是子数组的编号
{
for (j = i + step; j < n; j = j + step) //数组下标j,数组步长下标j+step
{
if (array[j] < array[j - step])
{
int temp = array[j]; //把数组下标j的值放到temp中
int k = j - step;
while (k >= 0 && temp < array[k])
{
array[k + step] = array[k]; //把大的值往后插入
k = k - step;
}
array[k + step] = temp; //把小的值往前插入
}
}
}
}
}
int main(void) //主程序
{
const int n = 10; //数组元素的数量
int array[n];
cout << "请输入10个整数:" << endl;
for (int i = 0; i < n; i++)
{
cin >> array[i];
}
cout << endl; //换行
ShellSort(array, n); // 调用BubbleSort函数 进行比较
cout << "由小到大的顺序排列后:" << endl;
for (int i = 0; i < n; i++)
{
cout << "Array" << "[" << i << "]" << " = " << array[i] << endl;
}
cout << endl << endl; //换行
system("pause"); //调试时,黑窗口不会闪退,一直保持
return 0;
}
希尔排序图解:
运行结果:
来源:CSDN
作者:辛旭东
链接:https://blog.csdn.net/xinxudongstudy/article/details/88411244