33,311
社区成员
发帖
与我相关
我的任务
分享
#include<stdio.h>
#include<stdlib.h>
void Bouble(int n,int a[]){
int i,j,temp;
for(j=0;j<n-1;j++){//**** j<n ==> j<n-1
for(i=0;i<n-j-1;i++){//**** i<n-j ==> i<n-j-1
if (a[i]>a[i+1]){
temp=a[i];
a[i]=a[i+1];
a[i+1]=temp;
}
}
}
printf("the result is:\n");
for(i=0;i<n;i++){
printf("%3d",a[i]);
}
printf("\n");
}
void Find(int n,int a[]){
int x,top=0,bot=n-1;
int mid;
printf("输入要查找的数:\n");
scanf("%d",&x);
while(top<=bot){
mid=(top+bot)/2;
if(x==a[mid]){
printf("找到元素,位置为:%d\n",mid+1);//不习惯于说第0个 找成非0自然数序号
return;
}
else if (x>a[mid]) top=mid+1;
else if (x<a[mid]) bot=mid-1;
}
printf("没有找到该元素!\n");
}
void main(){
int a[10],n,i=0;
printf("输入数组长度n:\n");
scanf("%d",&n);
printf("输入数组元素:\n");
for(i=0;i<n;i++){
scanf("%d",&a[i]);
}
printf("输入的数组为:\n");
for(i=0;i<n;i++){
printf("%d\n",a[i]);
}
Bouble(n,a);
Find(n,a);
}
原来的冒泡排序错误,越界1,把一个无效数据排到第0个上去了,改正好,下标是从0开始到n-1止