要求:
1. 用数组存储这一组整数,用变量存储整数x。
2. 除主函数外,至少编写4个函数:
a) 第1个函数的功能是将数组中的元素用选择法升序排列。
b) 第2个函数用折半查找法在数组中查找是否存在x。
c) 第3个函数的功能是输出数组中的所有数据
d) 第4个函数的功能是将键盘输入的数据存入数组中。
代码:
#include<stdio.h>
#include<stdlib.h>
int number[100]={0}; //数组长度最大为100
void sort(int *arr,int n) //选择排序法
{
int i,j,k;
int tmp;
for(i=0;i<n-1;i++)
{
k=i; //开始一趟选择排序,假定第i个元素是后面n-i+1个未排序的元素中最小的元素
for(j=i+1;j<n;j++)
{
if(arr[k] > arr[j]) //如果发现比当前最小元素还小的元素,则更新记录最小元素的下标k
k=j;
}
//如果最小元素的下标不是后面n-i+1的未排序序列的第一个元素,则需要交换第i个元素和后面找到的最小元素的位置
if(k != i)
{
tmp=arr[k];
arr[k]=arr[i];
arr[i]=tmp;
}
}
}
int search(int *arr,int len,int num){ //折半查找法
int result = -1;
int min=0,max=len-1,mid;
while (min <= max)
{
mid = (min + max)/2;
if (num > mid)
min = mid+1;
else if(num < mid)
max = mid-1;
else{
return result = mid;
}
}
return -1;
}
void output(int *arr,int len){ //输入数组信息
for(int i = 0;i<len;i++){
printf("%3d",arr[i]);
}
printf("\n");
}
int init(){ //初始化数组
int len;
printf("请输入数组长度:");
scanf("%d",&len);
if(!number[0])
{
for(int i=0;i<len;i++)
{
scanf("%d",&number[i]);
}
}
return len;
}
int main(){
int len ;
int num;
int res;
len = init();
printf("数组排序前为:\n");
output(number,len);
sort(number,len);
printf("数组排序后为:\n");
output(number,len);
printf("请输入要查找的数字:");
scanf("%d",&num);
res=search(number,len,num);
if (res>=0)
{
printf("该数字存在于数组中.\n");
}
else
printf("该数字存在于数组中.\n");
system("pause");
return 0;
}