二分查找:
int binsearch(int x,int s[],int n){ int i,j,middle,left,right; // middle=n/2; right=n-1; while(left<=right){ middle=(right+left)/2; if(x>s[middle]) left=middle+1; else if(x<s[middle]) right=middle-1; else return middle; } return -1; }
希尔排序:
void shellsort(int *s,int n){ int i,j,gap=n/2,temp; while(gap>0){ gap/=2; for(i=gap;i<n;i++) for(j=i-gap;s[j]>s[j+gap]&&j>=0;j-=gap) temp=s[j],s[j]=s[j+gap],s[j+gap]=temp; } }
归并排序:
void merge(int *a,int *t,int leftend,int middle,int rightend){ int leftop=leftend,rightop=middle,i=leftend; while(leftop<middle&&rightop<=rightend){ if(a[leftop]<=a[rightop]) t[i++]=a[leftop++]; else t[i++]=a[rightop++]; } while(leftop<middle){ t[i++]=a[leftop++]; } while(rightop<=rightend){ t[i++]=a[rightop++]; } for(i=rightend;i>=leftend;i--){ a[i]=t[i]; } } void msort(int *a,int *t,int leftend,int rightend){ if (leftend==rightend) { return; } int middle; middle=(rightend+leftend)/2; msort(a,t,leftend,middle); msort(a,t,middle+1,rightend); merge(a,t,leftend,middle+1,rightend); }
堆排序:
void sift(int *s,int low,int high){ int i=low; int j=2*i+1; int tmp=s[i]; while(j<=high){ // 判断j在二叉树的里面 if(j+1<=high && s[j+1]>s[j]){ // 找到最大的二叉树子节点 j=j+1; } if(tmp<s[j]){ // 比较父节点和最大子节点的大小,如果父节点小则下移,如果不小则停止循环 s[i]=s[j]; i=j; j=2*i+1; } else{ break; } } s[i]=tmp; // 把之前堆顶的值放到对应位置 } void heap_sort(int *s,int n){ int i,j,tmp; for(i=(n/2-1);i>=0;i--){ // 从最小的有儿子的节点开始,记住最右面的子节点是s[n-1],n/2-1这个就是最小的有儿子节点的数 sift(s,i,n-1); } for(i=n-1;i>0;i--){ tmp=s[0],s[0]=s[i],s[i]=tmp; sift(s,0,i-1); // 一步步的出堆,然后把最大值放到最后面 } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix