希尔排序,直接插入排序,插入希尔排序
#include<stdio.h>
void InsertSort(int s[],int n);
void InsertSort2(int s[],int n);
void ShellSort(int s[],int n);
int s[8]={49,38,65,97,76,13,27,49};
int main(){
InsertSort(s,8);
InsertSort2(s,8);
ShellSort(s,8);
}
void print(int s[],int n){
for(int i=0;i<n;i++){
printf("%d ",s[i]);
}
printf("\n");
}
void InsertSort(int s[],int n){
printf("直接插入排序\n");
int i=0,j=0,tem;
for(i=1;i<n;i++){
tem=s[i];
for(j=i-1;j>=0,s[j]>tem;j--){
s[j+1]=s[j];
}
s[j+1]=tem;
print(s,8);
}
}
void InsertSort2(int s[],int n){
printf("直接插入折半排序\n");
int i=0,j=0,tem;
int low,high,mid;
for(i=1;i<n;i++){
tem=s[i];
low=0;
high=i-1;
while(low<=high){
mid=(low+high)/2;
if(s[mid]>tem){
high=mid-1;
}
else{
low=mid+1;
}
}
for(j=i-1;j>=low;j--){
s[j+1]=s[j];
}
s[low]=tem;
print(s,8);
}
}
void ShellSort(int s[],int n){
printf("希尔排序\n");
int dk=n/2,tem;
int i,j;
while (dk>=1)
{
for(i=dk;i<n;i++){
tem=s[i];
for(j=i-dk;j>=0,s[j]>s[i];j=j-dk){
s[j+dk]=s[j];
}
s[j+dk]=tem;
}
print(s,8);
dk/=2;
}
}