二分法排序其实是一种改进的插入排序,也是通过查找待插入位置来实现排序,这和插入排序是类似的。
算法思想,在插入第i个元素时,对前面的0~i-1元素进行折半,先跟他们中间的那个元素比,如果小,则对前半部分再进行折半,否则对后半进行折半,
直到left<right,然后再把第i个元素前1位与目标位置之间的所有元素后移,再把第i个元素放在目标位置上。
二分法实际上没有进行排序,只进行了有查找。所以当找到要插入的位置时,必须从移动最后一个记录开始,向后移动一位,再移动倒数第2位,直到要插入的位置的记录移后一位。
![图片[1]-二分法排序 - it同学-it同学](https://www.ittx.cn/wp-content/uploads/2021/05/1997651-20200430175121786-368191687.jpg)
C语言代码实现
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a[8];
int n=8;
for(int i=0;i<n;i++){
scanf("%d",&a[i]);
}
int i,j,mid=0,left,right,tem=0;
for(i=1;i<n;i++){
tem=a[i];
left=0;
right=i-1;
while(left<=right){
mid=(left+right)/2;
if(a[mid]>tem)
right=mid-1;
else
left=mid+1;
}
for(j=i-1;j>=left;j--){
a[j+1]=a[j];
}
a[left]=tem;
}
for(int i=0;i<n;i++){
printf("%d",a[i]);
}
}
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
喜欢就支持一下吧