程序代码:
#include"stdio.h"
#include"stdlib.h"
#include<iostream>
using namespace std;
void swap(int&a, int&b)
{
int c;
c = a;
a = b;
b = c;
}
//希尔排序法,就是将数据分组后进行排序,分组后可用直接插入排序、选择排序、冒泡排序等。
void shell_sort(int a[], int n)
{
printf("the unsort data is:");
for (int i = 0; i < n; i++)
printf("%d ", a[i]);
cout << endl;
int gap = n / 2;
while (gap >=1)
{
//根据gap分组后,每一组的情况利用冒泡排序法
for (int i = 0; i < gap; i++)
{
for (int j = 0; j < n -gap; j += gap)//每一组要进行多少趟冒泡排序
{
for (int k = i; k < n - gap*(1+j); k += gap)//每一次冒泡排序的情况
{
if (a[k]>a[k + gap])
swap(a[k], a[k + gap]);
}
}
}
printf("the th sort data is:");
for (int i = 0; i < n; i++)
printf("%d ", a[i]);
cout << endl;
gap /= 2;
}
printf("the sort data is:");
for (int i = 0; i < n; i++)
printf("%d ", a[i]);
cout << endl;
}
int main()
{
int a[10] = { 3, 1, 9, 8, 5, 4, 7, 2, 6, 10 };
shell_sort(a, 10);
system("pause");
return 0;
}
实验结果: