参考博客:MoreWindows博客——白话经典算法
#include
void swap(int a[],int i,int j);
void insertSort(int a[],int n);
void printArr(int a[],int n);
int main(void){
int a[8] = {-2,5,-9,3,16,12,7,35};
printf("排序前的数组: \n");
printArr(a,8);
insertSort(a,8);
printf("排序后的数组: \n");
printArr(a,8);
return 0;
}
void insertSort(int a[],int n){
int i,j;
for(i=1;i<n;i++)
for(j=i;j>0 && a[j]<a[j-1];j--)
swap(a,j,j-1); //注意,传入的是下标
}
void swap(int a[],int i,int j){
if(a[i]<a[j]){
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
void printArr(int a[],int n){
for(int i=0;i<n;i++){
printf("%d ",a[i]);
}
printf("\n");
}
#include
void printArr(int a[],int n);
void shellSort(int a[],int n);
void swap(int a[],int i,int j);
int main(void){
int a[12] = {1,-3,7,3,15,10,29,20,37,39,22,-9};
printf("排序前\n");
printArr(a,12);
shellSort(a,12);
printf("排序后\n");
printArr(a,12);
return 0;
}
void printArr(int a[],int n){
for(int i=0;i<n;i++){
printf("%d ",a[i]);
}
printf("\n");
}
void shellSort(int a[],int n){
int d,i,j;
for(d=n/2;d>=1;d/=2){ //缩减增量序列
for(i=d;i<n;i++){
for(j=i;j>0&&a[j]<a[j-d];j-=d){
swap(a,j,j-d);
}
}
}
}
void swap(int a[],int i,int j){
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}