输入数据后的排序方法有很多种,这里我用的是暴力排序,各位友友们可以尝试更改排序方法
#include <stdio.h>
#include <stdlib.h>
/**
实现排序和二分法查找
**/
void shuru(int a[],int x)
{
for(int i=0;i<x;i++){
printf("a[%d]为:",i);
scanf("%d",&a[i]);
}
}
void paixu(int a[],int x){
int temp=0;
for(int i=0; i<x; i++){
for(int j=i+1;j<x;j++){
if(a[i]>a[j]){
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
}
}
void shuchu(int a[],int x){
for(int i=0;i<x;i++){
printf("%d\t",a[i]);
}
}
int chazhao(int a[],int x,int b){
for(int i=0;i<x;i++){
if(a[i]==b){
return i;
}
}
return -1;
}
//二分法实现查找
//二分法必须是有序的数组
void chazhao2(int a[],int x,int b){
int begin=0;
int end=x-1;
while(begin<=end){
int middle=(begin+end)/2;
if(b<a[middle]){
end=middle-1;
}else if(b>a[middle]){
begin=middle+1;
}else if(b==a[middle]){
printf("找到了下标为:%d\n",middle);
int temp=middle-1;
while(1){
if(a[temp]!=b||temp<0){
break;
}
printf("找到了下标为:%d\n",temp--);
}
temp=middle+1;
while(1){
if(a[temp]!=b||temp>x-1){
break;
}
printf("找到了下标为:%d\n",temp++);
}
break;
}else{
printf("查无此数");
}
}
}
int main()
{
int x,b;
printf("请输入要比较的数的数目:");
scanf("%d",&x);
int a[x];
shuru(a,x);
printf("\n");
printf("该数组顺序为:");
paixu(a,x);
shuchu(a,x);
printf("\n");
printf("请输入要查找的数:");
scanf("%d",&b);
int c=chazhao(a,x,b);
if(c>=0){
printf("要查找的数为a[%d]:%d",c,a[c]);
}else{
printf("查无此数");
}
printf("\n");
chazhao2(a,x,b);
return 0;
}