折半插入排序

it2025-12-23  6

C语言实现折半插入排序代码如下:

#include<stdio.h> #define N 10000//定义数组最大长度10000 void BinaryInsertSort(int s[],int n)//自定义折半插入排序函数,s为数组名,n为数组长度 { int i,position,t,k;//position为s[i]经折半查找所确定的位置 for(i=1;i<n;i++){//下标从0开始,从i=1开始向前插入 int l=0,r=i; int half; while(l<r){//该循环通过二分法确定s[i]位置(position) half=(l+r)/2; if(s[i]>s[half]){ l=half+1; position=l; } else if(s[i]<s[half]){ r=half; position=r; } else{ position=half; break; } } if(i!=position){//表示s[i]需要向前插入 t=s[i];//保存s[i],便于其他数据向后移位 for(k=i-1;k>=position;k--) s[k+1]=s[k]; s[position]=t; } } } int main() { int s[N]; int n,i; printf("请输入待排数组长度:\n"); scanf("%d",&n);//扫描数组长度 printf("请输入待排数组:\n"); for(i=0;i<n;i++) scanf("%d",&s[i]);//扫描数组 BinaryInsertSort(s,n);//将数组通过自定义的折半插入排序函数进行排序 printf("排序结果如下:\n"); for(i=0;i<n;i++) printf("%d ",s[i]);//输出排序结果 return 0; }
最新回复(0)