#include<stdio.h>
#define Elemtype int
void Printf(Elemtype A[],int n){
int t;
for(t = 1;t<n;t++ ){
printf("%d ,",A[t]);
}
}
/************直接插入排序*************/
void InsertSort(Elemtype A[],int n){
int i , j;
for(i=2;i<=n;++i){
if(A[i]<A[i-1]){
A[0]=A[i];
for(j=i-1;A[j]>A[0];--j){
A[j+1]=A[j];
}
A[j+1]=A[0];
}
}
Printf(A,9);
}
/**********折半插入排序*******/
void Half_insertion_sort(Elemtype A[],int n){
int i,j,low,high,mid;
for(i=2;i<=n;++i){
A[0]=A[i];
low = 1;
high = i-1;
while(low<=high){
mid = (low+high)/2;
if(A[mid]>A[0]){
high=mid-1;
}else{
low=mid+1;
}
}
for(j=i-1;j>=high+1;--j){
A[j+1]=A[j];
}
A[high+1]=A[0];
//这一步也可以写成A[low]=A[0];
}
Printf(A,9);
}
/*******希尔排序*******/
void ShellSort(Elemtype A[],int n){
/*这个A[0]只是作为一个暂存的单元,而不是哨兵*/
int i,j;
for(int dk=n/2;dk>1;dk=dk/2){
for(i=dk+1;i<=n;++i){
if(A[i]<A[i-dk]){
A[0]=A[i];
for(j=i-dk;j>0&&A[0]<A[j];j-=dk){
A[j+dk]=A[j];
}
A[j+dk]=A[0];
}
}
}
Printf(A,8);
}
int main(){
Elemtype A[9] = {
0,1,3,2,4,6,5,7,8};
printf("原数组为:");
Printf(A,8);
printf("\n");
printf("直接插入排序:");
InsertSort(A,8);
printf("\n");
printf("折半插入排序:");
Half_insertion_sort(A,8);
printf("\n");
printf("希尔排序:");
ShellSort(A,8);
printf("\n");
}
直接插入排序,折半插入排序,希尔排序的C语言实现
猜你喜欢
转载自blog.csdn.net/qq_43964318/article/details/108345824
今日推荐
周排行