选择法降序与折半查找法

来源:互联网 发布:淘宝订单监控 编辑:程序博客网 时间:2024/05/29 07:02

编写函数:(1)用选择法将数组排成降序的函数----SUB1;(2)用折半查找法查找某数是否在给定的数组当中的函数----SUB2

主函数:输入任意10个正整数给数组,调用SUB1对数组进行排序,从键盘输入一个正整数,调用SUB2在数组中进行查找,找到后输出“OK”,没有找到则输出“NO FOUND!”。

 

选择法与冒泡排序的时间复杂度都是O(n2),在编写降序排列函数时,最后两数组元素的交换要在写在第一个for循环的外面,需要考虑。折半查找的方法也比较经典,代码如下:

 

#include<stdio.h>
#define N 10

void swap(int a[],int x,int y)//交换数组中的两个元素
{      int temp;
       temp=a[x];
    a[x]=a[y];
    a[y]=temp;   
}

void sub1(int a[])
{
int max;
int i,j;
for(i=0;i<N-1;i++)  //控制比较次数
{       max=i;
     for(j=i+1;j<=N-1;j++)  //控制比较的数字
  {    if(a[max]<a[j])
   {   max=j; 
   }
  }
  if(max!=i)
  swap(a,i,max);
 }
}

int youxu(int b[],int n,int key)//用有序表查找,二分查找
{
int low=0;
int high=n-1;
int mid;
while (low<=high)
{
int mid=(low+high)/2;
if (key>b[mid])
 {  high=mid-1;
 }
else if (key<b[mid])
 {  low=mid+1;
 }
    else
 {
 printf("ok!i find the number!");
 return mid;
 }
}
  printf("i can not find the number!");
  return 0;
}

void main()
{  int abc[]={2,3,5,6,1,6,5,3,4,9};
   sub1(abc);
   int x;
   for(x=0;x<N;x++)
   {printf("abc[%d]=%d\n",x,abc[x]);
   }
   int c;
   c=youxu(abc,N,4);
   printf("the number is abc[%d]\n",c);
  
}