/*
File: 实验6的程序
Description:用冒泡排序的方法对用户输入的任意的一个整型数组进行排序;排序后,用户
任意地输入的一个数,用二分查找法查找用户输入的数字,并给出该数在序列中的位置。
Programmer: luye
Date: 21/11/2007
*/
File: 实验6的程序
Description:用冒泡排序的方法对用户输入的任意的一个整型数组进行排序;排序后,用户
任意地输入的一个数,用二分查找法查找用户输入的数字,并给出该数在序列中的位置。
Programmer: luye
Date: 21/11/2007
*/
#include<stdio.h>
#define TRUE 1 /*符号常量的使用*/
#define FALSE 0
#define MAXNUMB 10000
#define TRUE 1 /*符号常量的使用*/
#define FALSE 0
#define MAXNUMB 10000
/*对用户输入的任意数组进行排序*/
void paixu (int *a,int maxnumb) /*函数paishu的首行部*/
{
int m,n,middvari;
for(m=0;m<maxnumb-1;m++) /*用循环语句交换两个数的位置*/
for(n=0;n<(maxnumb-1-m);n++)
if(*(a+n)>*(a+n+1))
{
middvari=*(a+n);
*(a+n)=*(a+n+1);
*(a+n+1)=middvari;
}
}
void paixu (int *a,int maxnumb) /*函数paishu的首行部*/
{
int m,n,middvari;
for(m=0;m<maxnumb-1;m++) /*用循环语句交换两个数的位置*/
for(n=0;n<(maxnumb-1-m);n++)
if(*(a+n)>*(a+n+1))
{
middvari=*(a+n);
*(a+n)=*(a+n+1);
*(a+n+1)=middvari;
}
}
/*用二分查找法查找用户要查找的数,并返回该数在序列中的位置*/
int zhaoshu(int b[],int key,int maxnumb) /*函数的首行部*/
{
int found,index,left,right,middnumb;
found=FALSE; /*设置found为false*/
index=-1; /*设置索引值为-1*/
int zhaoshu(int b[],int key,int maxnumb) /*函数的首行部*/
{
int found,index,left,right,middnumb;
found=FALSE; /*设置found为false*/
index=-1; /*设置索引值为-1*/
for(left=0,right=maxnumb-1; left<=right&&!found; )
{
middnumb=(int)((left+right)/2); /*找出中间的数值middnumb*/
if(key==b[middnumb]) /*把要查找的数和中间的数值middnumb进行比较*/
{
found=TRUE;
index=middnumb;
}
else if(key<b[middnumb])
right=middnumb-1;
else
left=middnumb+1;
}
{
middnumb=(int)((left+right)/2); /*找出中间的数值middnumb*/
if(key==b[middnumb]) /*把要查找的数和中间的数值middnumb进行比较*/
{
found=TRUE;
index=middnumb;
}
else if(key<b[middnumb])
right=middnumb-1;
else
left=middnumb+1;
}
return(index); /*返回该数在序列中的位置*/
}
}
void main()
{
int i,j,numb[MAXNUMB]; /*定义一个数组和循环控制变量*/
int maxnumb,key,location;
printf("Please type in a number:");
for(i=0;scanf("%d",&numb[i])!=EOF;i++) /*输入随意的几个数*/
{
maxnumb=i+1; /*变量maxnumb为用户输入的数组的元素个数*/
printf("Please type in a number:");
}
paixu(numb,maxnumb); /*函数paixu再这里被调用*/
for(i=0;scanf("%d",&numb[i])!=EOF;i++) /*输入随意的几个数*/
{
maxnumb=i+1; /*变量maxnumb为用户输入的数组的元素个数*/
printf("Please type in a number:");
}
paixu(numb,maxnumb); /*函数paixu再这里被调用*/
for(j=0;j<maxnumb;j++) /*输出排序后的有序数组*/
printf("%d\n",numb[j]);
printf("Please enter the number you want to find:"); /*输入用户要查找的数key*/
scanf("%d",&key);
printf("%d\n",numb[j]);
printf("Please enter the number you want to find:"); /*输入用户要查找的数key*/
scanf("%d",&key);
location=zhaoshu(numb,key,maxnumb); /*函数zhaoshu再这里被调用,并把返回的数值存储在location里面*/
if(location>-1) /*对返回的该数在有序的数组里的位置进行判断*/
printf("The number you are founding is located in %d .\n",location);
else
printf("The number you are founding is not founded!\n");
}
if(location>-1) /*对返回的该数在有序的数组里的位置进行判断*/
printf("The number you are founding is located in %d .\n",location);
else
printf("The number you are founding is not founded!\n");
}