第7周 C语言及程序设计提高例程-27 编写查找和排序函数(有疑问)

1、用函数实现二分法查找;

问题及代码:

/*在一个数组中,查找某个值的位置*/  
#include<stdio.h>  
#define SIZE 10  
int binary_search(int[],int,int) ; //声明一个合并功能的函数  
int main()  
{  
    int a[SIZE]={25,45,36,48,89,57,65,25,26,16};  
    int key,index=-1;  
    int low,high,mid;  
    printf("请输入要查找的值");  
    scanf("%d",&key);  //%d后面多了一个\n导致程序不能运行,为何? 
    index=binary_search(a,SIZE,key);    //函数实参:数组名及长度,输入值,返回k;   
      if(index>=0)  
         printf("它的位置是%d\n",index); //输出查找的元素值得位置;   
      else  
         printf("没有找到!\n");  
     return 0;        
 }   
 /*  
功能:在长度为n的数组中查找k出现的位置;;  
入口参数: 数组名,数组大小,查找的值; 
返回值:查找的值的位置;  
*/  
 int binary_search(int arr[],int n,int k)  
 {  
    int i=-1; //初始化为负数,指找不到;   
    int low=0,high=n-1,mid;     
    while(low<=high)  //这里如果用for循环,该如何设置步长 
    {  
        mid=(low+high)/2;  
        if(arr[mid]==k)  
          {  
            i=mid;  
            break;  
           }  
        else if(arr[mid]>k)  
            high=mid-1;//mid已经判断过了,所以,要mid-1;   
        else  
            low=mid+1;  //mid已判断过了,所以应mid+11;            
     }  
      return i;   
    }  

运行结果:

第7周 C语言及程序设计提高例程-27 编写查找和排序函数(有疑问)_第1张图片

学习心得:

二分法查找,注意要定义一个找不到的情况;

知识总结:

当输入57及之后的数字,返回结果是没有找到,这是为何?


2、用函数实现选择法算法;

问题及代码:

/*对一个数组进行排序*/
#include <stdio.h>  
void search_sort(int[],int);  
#define SIZE 10
int main( )  
{  
    int i;
	int a[SIZE] = {1, 3, 9, 12, 32, 41, 45, 62, 75, 77};  
    search_sort(a,10);
    printf("排序:\n");
    for(i=0;i<SIZE;i++)
    printf("%d\n",a[i]);
    return 0;
}  
/* 
功能:选择法对数组进行排序;
入口参数:数组名,长度;
返回值:无返回值; 
*/  
void search_sort(int arr[],int n)
{
	int i,j,k,t;
    for(i=0;i<n-1;i++)  //为何只要循环到n-1 
    {
    	k=i;   //先设定一个最小值;
	for(j=i+1;j<n;j++) 
	    if(arr[j]<arr[k])
		 k=j;   //通过循环得到k最小; 
	  t=arr[k];  //交换a[i]和a[k];
	  arr[k]=arr[i];
	  arr[i]=t;		
	}
	return ;
 } 
运行结果:

第7周 C语言及程序设计提高例程-27 编写查找和排序函数(有疑问)_第2张图片

学习心得:

自定义排序函数;

知识总结:



你可能感兴趣的:(第7周 C语言及程序设计提高例程-27 编写查找和排序函数(有疑问))