sort(排序) qsort(快排) bsearch(二分查找)

sort:

一、对int类型数组排序

 

int a[100];

int cmp ( int a , int b ) //不必强制转换

{

return a < b;//升序排列。

sort (a(数组名) , a+100(数组最后一个元素), cmp);

头文件 #include<algorithm>,属于C++中STL 

 

qsort:

一、对int类型数组排序

int a[100];

int cmp ( const void *a , const void *b ) //此处必须强制转换

{

return *(int *)a - *(int *)b;//升序排列。

所以在前面的字符的值一定小于后面的字符。

 

那么,对于a b,如果a的值>b的值,就说明在字母表中a在b的后面

}

qsort(a(数组名),100(数组长度),sizeof(a[0])(数组元素的宽度),cmp);  头文件#include <stdlib.h>

 

 

bsearch :(一般与qsort连用)

以int 型数组为例

bsearch 返回一个地址

int *p;

 

[html] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. p = (int *)bsearch(&k(关键字地址), a(数组名), n(数组长度), sizeof(a[0]), cmp);//C++需要(int *)强制转换,C不用  

 

 

 

[html] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. #include <stdio.h>  
  2. #include <stdlib.h>  
  3.   
  4. int cmp(const void *p, const void *q)  
  5. {  
  6.     return (*(int *)p - *(int *)q);  
  7. }  
  8.   
  9. int main()  
  10. {  
  11.     int a[1000001];  
  12.     int n,k,*p;  
  13. while(~scanf("%d",&n))  
  14. {  
  15. for(int i = 0;i<n;i++)  
  16. {  
  17.     scanf("%d",&a[i]);  
  18. }  
  19.       scanf("%d",&k);  
  20.   
  21.     qsort(a, n, sizeof(a[0]), cmp);  
  22.     p = bsearch(&k, a, n, sizeof(a[0]), cmp);  
  23.   
  24.     (p == NULL) ? puts("NO") : puts("YES");  
  25. }  
  26.     return 0;
  27. }   
posted @ 2014-04-20 19:52  人艰不拆_zmc  阅读(430)  评论(0编辑  收藏  举报