二分法排序

二分法排序其实是一种改进的插入排序,也是通过查找待插入位置来实现排序,这和插入排序是类似的。

    算法思想,在插入第i个元素时,对前面的0~i-1元素进行折半,先跟他们中间的那个元素比,如果小,则对前半部分再进行折半,否则对后半进行折半,

直到left<right,然后再把第i个元素前1位与目标位置之间的所有元素后移,再把第i个元素放在目标位置上。

    二分法实际上没有进行排序,只进行了有查找。所以当找到要插入的位置时,必须从移动最后一个记录开始,向后移动一位,再移动倒数第2位,直到要插入的位置的记录移后一位。

图片[1]-二分法排序-it同学

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
喜欢就支持一下吧
点赞7 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容