希尔排序:它是一种对插入排序的改进,减少了比较次数,提高了效率
#include <iostream>
using namespace std;
extern void print_o(int *, int);
void shell_sort(int *a, int len)
{
int i, j, temp, n;
n = len/2;
while(n!=0)
{
for(i=n; i<len; i++)
{
temp = a[i]; //!!!!
for(j=i-n; j>=0; j -= n)
{
if(a[j]>temp)
a[j+n] = a[j];
else
break;
}
//至此已经确定了j的位置
a[j+n] = temp;
//测试所用print_o(a, len);
//同上cout << "n: " << n << endl << endl;
}
n /= 2;//每次循环都减少偏移
}
}
int main()
{
int a[7] = {3,7,0,9,1,4,2};
int len = sizeof(a)/sizeof(int);
print_o(a, len);//测试遍历所用
shell_sort(a, len);
}