第2题:希尔排序( Shell Sort)是插入排序的一种。是针对直接插入排序算法的改进。该方法又称缩小增量排序。因DL.Shell于1959年提出而得名。希尔排序思想:希尔排序是按照不同步长对原始元素12 11 10 9 8 7 6 5 4 3 2 1进行插入排序,步长为6,也就是间隔为6的元素插入排序结果为6 5 4 3 2 1 12 11 10 9 8 7,接着步长为3进行插入排序结果为3 2 1 6 5 4 9 8 7 12 11 10,再接着步长为1进行插入排序结果为1 2 3 4 5 6 7 8 9 10 11 12
根据如上描述,完善如下希尔排序程序
#include<ctime>
#include<cstdlib>
#include<cstring>
#include<iostream>
using namespace std;
const int SIZE = 12;
typedef int arr[SIZE +1];
arr a;
int i, j, k, t;
void ki(){
srand(time(NULL) );
for(i= 1; i<=SIZE; i++)
cin>>a[i];
}
void ki2(){
for (i=1; i<SIZE; i++) cout<<a[i]<< " ";
cout << a[SIZE];
}
void insertionsort(arr a){
for (i=2; i<=SIZE; i++){
t=a[i];
j=i-1;
while (j>0 && a[j]>t ) {
}
a[j+1]=a[j];
j-- ;
}
a[j+1]=t;
}
}
int main(){
ki();
k=SIZE;
while (k>1) {
k /=2;
for (j=k+1; j<=SIZE; j++){
t=a[j];
i=j-k;
while (i>0 && a[i] >t){
a[i+k]=a[i];
i-=k ;
}
a[i+k]=t;
}
}
ki2();
return 0;
}