排序——希尔排序
#include <iostream>
using namespace std;
void shell_sort(int array[], int length){
int i;
int j;
int k;
int gap; //gap是分组的步长
int temp; //希尔排序是在直接插入排序的基础上实现的,所以仍然需要哨兵
for(gap=length/2; gap>0; gap=gap/2){
for(i=0; i<gap; i++){
for(j=i+gap; j<length; j=j+gap){ //单独一次的插入排序
if(array[j] < array[j - gap]){
temp = array[j]; //哨兵
k = j - gap;
while(k>=0 && array[k]>temp){
array[k + gap] = array[k];
k = k - gap;
}
array[k + gap] = temp;
}
}
}
}
}
int main() {
// insert code here...
int a[100];
int c=0;
int i=1;
scanf("%d",&a[i]);
while(a[i]!=0)
{
//printf("%d %d\n",i,a[i]);
i++;
scanf("%d",&a[i]);
c++;
}
shell_sort(a, c+2);
for(int i=1;i<c;i++)
{
printf("%d ",a[i]);
}
printf("%d",c);
printf("\n");
return 0;
}