注:数组是从arr[1]开始排序
#include<iostream>
using namespace std;
void ShellInsert(int arr[],int n){
for(int gap = (n+1)/2;gap>0;gap/=2){
for(int i=gap;i<=n;i++){
int j = i;
while(j-gap>0&&arr[j]<arr[j-gap]){
arr[0] = arr[j];
arr[j] = arr[j-gap];
arr[j-gap] = arr[0];
j-=gap;
}
}
}
}
void printArray(int arr[] ,int n)
{
int i;
for(i = 1; i <= n; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
}
int main(){
int n;
cin>>n;
int arr[n+1];
for(int i=1;i<=n;i++){
cin>>arr[i];
}
ShellInsert(arr,n);
printArray(arr,n);
return 0;
}