关于C语言冒泡排序与二分法的结合运用

冒泡排序与二分法在前面的博客中,已经写道了,这里概念暂不概述。

例题:

一、输入2行的数组,采用冒泡排序的方式由小到大排序,输出排序完毕的2行数组

二、输入一个数,采用二分法在数组中查询对应数,输出该数在数组中的位置。

 

技巧:由于该题在是2行的数组,故将数组联想为单行的数组,测试完毕后再添加循环会相对简单。

#include <stdio.h>
int main(){
    int t,a[2][5];
    for(int hang=0;hang<2;hang++){
        for(int i=0;i<5;i++){
            scanf("%d",&a[hang][i]);
        }
    }
    printf("\n");
    for(int hang=0;hang<2;hang++){
        for(int i=0;i<4;i++){
            for(int j=0;j<4-i;j++){
                if(a[hang][j]>a[hang][j+1]){
                    t=a[hang][j];
                    a[hang][j]=a[hang][j+1];
                    a[hang][j+1]=t;
                }
            }
        }
    }
    for(int hang=0;hang<2;hang++){
            for(int i=0;i<5;i++){
            printf("%d",a[hang][i]);
        }
        printf("\n");
    }
    int low,mid,high,b,found,anshang,anslie,shoulie,weilie;
    scanf("%d",&b);
    low=0;
    high=4;
    found=0;
    for(int hang=0;hang<2;hang++){
        while(low<=high){
            mid=(low+high)/2;
            if(b==a[hang][mid]){
                anshang=hang;
                anslie=mid;
                found=1;
                if(a[hang][mid]==a[hang][mid-1]){
                    shoulie=mid-1;
                    printf("the index of %d is %d %d\n",b,anshang,shoulie);
                }
                printf("the index of %d is %d %d\n",b,anshang,anslie);
                if(a[hang][mid]==a[hang][mid+1]){
                    weilie=mid+1;
                    printf("the index of %d is %d %d\n",b,anshang,weilie);
                }
                break;
            }else if(b > a[hang][mid]){
                low=mid+1;
            }else{
                high=mid-1;
            }
        }
    }
    if(found==0){
        printf("there is not %d",b);
    }
    return 0;
}

转载于:https://www.cnblogs.com/jcfeng/p/11323887.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值