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

例题:

一、输入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;
}