冒泡排序与二分法在前面的博客中,已经写道了,这里概念暂不概述。
例题:
一、输入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;
}