A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

  1. #include "stdio.h"
  2. #include "malloc.h"

  3. int BinarySearch(int *pArr, int low, int high, int key)//查找函数  
  4. {  
  5.     int mid;  
  6.     if(low <= high)  
  7.     {  
  8.         mid = (low+high) / 2;  
  9.         if(pArr[mid] == key)  
  10.            return mid;  
  11.         if(key > pArr[mid])  
  12.             return BinarySearch(pArr,mid+1,high,key);         
  13.         else  
  14.             return BinarySearch(pArr,low,mid-1,key);              
  15.     }
  16.    
  17.     return -1;
  18. }  

  19. int partitions(int *a,int low,int high)
  20. {
  21.         int pivotkey=a[low];
  22.         while(low<high)
  23.         {
  24.                 while(low<high && a[high]>=pivotkey)
  25.                         --high;
  26.                 a[low]=a[high];
  27.                 while(low<high && a[low]<=pivotkey)
  28.                         ++low;
  29.                 a[high]=a[low];
  30.         }
  31.         a[high]=pivotkey;
  32.         return high;
  33. }
  34. void qsort(int *a,int low,int high)
  35. {
  36.         int pos;
  37.         if(low<high)
  38.         {
  39.                 //递归调用
  40.                 pos = partitions(a,low,high);
  41.                 qsort(a,low,pos-1);
  42.                 qsort(a,pos+1,high);
  43.         }
  44. }

  45. int main(void)
  46. {
  47.         int len;
  48.         int *pArr; //定义指针变量pArr
  49.         int i, key, pos;
  50.         char x;
  51.        
  52.         printf("请输入数组的长度:\n");
  53.         scanf("%d", &len);
  54.        
  55.         /*  动态分配内存给pArr  */
  56.         pArr = (int *)malloc( sizeof(int) * len );
  57.        
  58.         printf("请输入你要存放的元素(空格分隔):\n");
  59.        
  60.         for(i=0; i<len; ++i)
  61.                 scanf("%d", &pArr[i]);
  62.                
  63.         printf("您输入的数组内容如下:\n");
  64.        
  65.         for(i=0; i<len; ++i)
  66.                 printf("pArr[%d] = %d\n" ,i, pArr[i]);
  67.                
  68.         printf("\n您需要对数组内容进行快速排序并折半查找吗?(y or n):\n");
  69.        
  70.         getchar();// 接收回车键字符
  71.         scanf("%c", &x);
  72.        
  73.         if(x == 'y') //人机交互
  74.         {
  75.                 qsort( pArr, 0, len-1 );//调用排序函数
  76.                 printf("快速排序的结果如下:\n");
  77.             for(i=0;i<len;i++)
  78.                 printf("pArr[%d] = %d\n" ,i, pArr[i]);
  79.                        
  80.                 printf("请输入你需要查找的数据:");
  81.                 scanf("%d",&key);
  82.                
  83.                 pos = BinarySearch( pArr, 0,len-1, key );//调用折半查找函数  
  84.             printf("\n");
  85.             if(pos>=0)
  86.                 printf("查找成功,该数字存储在排序后的数组下标为[%d]的位置。\n",pos);
  87.             else
  88.                 printf("查找失败! 您的输入有误\n");
  89.                        
  90.                 free(pArr);    /*释放内存*/
  91.         }
  92.        
  93.         return 0;   
  94. }
复制代码

评分

参与人数 1黑马币 +3 收起 理由
wanzhu159 + 3 有好东西,拿到论坛里一起分享哦!.

查看全部评分

3 个回复

倒序浏览
第一次发表帖子,多多关照
回复 使用道具 举报
赞一个!!
回复 使用道具 举报

你是哪里人?我还在读大二,准备大四去黑马培训
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马