Chinaunix首页 | 论坛 | 博客
  • 博客访问: 200047
  • 博文数量: 51
  • 博客积分: 1435
  • 博客等级: 上尉
  • 技术积分: 590
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-05 18:33
文章分类

全部博文(51)

文章存档

2012年(17)

2011年(34)

分类: C/C++

2011-04-08 20:32:12

  1. #include <stdio.h>
  2. #define MAX 100
  3. void qsort(int a[],int p,int r);
  4. int Partition(int a[],int p,int r);
  5. int search(int a[],int key,int p,int r);
  6. int main()
  7. {
  8.     int n,i,key,b;
  9.     printf("input the number of elements\n");
  10.     scanf("%d",&n);
  11.     int a[MAX];
  12.     printf("input elements\n");
  13.     for(i=1;i<=n;i++)
  14.     {
  15.         scanf("%d",&a[i]);
  16.     }
  17.     for(i=1;i<=n;i++)
  18.     {
  19.         printf("%d ",a[i]);
  20.     }
  21.     printf("\n");
  22.     qsort(a,1,n);
  23.     for(i=1;i<=n;i++)
  24.     {
  25.         printf("%d ",a[i]);
  26.     }
  27.     printf("\n");
  28.     printf("input the key word you want to check!\n");
  29.     scanf("%d",&key);
  30.     b=search(a,key,1,n);
  31.     printf("%d\n",b);

  32.     
  33.     return 0;
  34. }
  35. void qsort(int a[],int p,int r)
  36. {
  37.     int q;
  38.     if(p<r)
  39.     {
  40.         q=Partition(a,p,r);
  41.         qsort(a,p,q-1);
  42.         qsort(a,q+1,r);
  43.     }
  44. }
  45. int Partition(int a[],int p,int r)
  46. {
  47.     int key=a[p];
  48.     while(p<r)
  49.     {
  50.         while(p<r&&a[r]>key)
  51.             r--;
  52.         a[p]=a[r];
  53.         while(p<r&&a[p]<key)
  54.             p++;
  55.         a[r]=a[p];
  56.     }
  57.     a[p]=key;
  58.     return p;
  59. }
  60. int search(int a[],int key,int p,int r)
  61. {
  62.     int mid=0;
  63.     while(p<r)
  64.     {
  65.         mid=(p+r)/2;
  66.         if(a[mid]>key)
  67.             r=mid-1;
  68.         else if(a[mid]<key)
  69.             p=mid+1;
  70.         else
  71.             return mid;
  72.     }
  73.     return mid;
  74. }
阅读(1304) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~