#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>
#define SIZE 1000000
int compare_int (const void *a, const void *b) {
return *(int *)a - *(int *)b;
}
int compare_char (const void *a, const void *b) {
return strcmp((char *)a,(char *)b);
}
int arr_int[SIZE];
char arr_char[SIZE][5] = { "cat", "car", "cab", "cap", "can" };
typedef struct node{
int a[9];
}Node;
int compare_iarr (const void *a, const void *b) {
return *(int *)a - *(int *)b;
}
int main () {
int n;
int i;
//int arr的运用
printf("int arr的运用\n");
Node a[10000];
n = 100;
int j;
for(i = 0; i < n; i ++){
for(j = 0; j < 9; j ++){
a[i].a[j] = rand()%100;
}
}
/* for(i = 0; i < n; i ++){
for(j = 0; j < 9; j ++){
printf("%d ", a[i].a[j]);
}
printf("\n");
}*/
qsort(a, n, sizeof(a[0]), compare_iarr);
/* printf("\n");
for(i = 0; i < n; i ++){
for(j = 0; j < 9; j ++){
printf("%d ", a[i].a[j]);
}
printf("\n");
}*/
Node nod = {41,47,34,1,1,1,1,1,1};
if((Node *)bsearch(&nod, a, n, sizeof(a[0]), compare_iarr) != NULL)
printf("yes");
int t1, t2;
int ci = 0;
t1 = clock();
while(ci < 100000){
qsort(a, n, sizeof(a[0]), compare_iarr);
if((Node *)bsearch(&nod, a, n, sizeof(a[0]), compare_iarr) != NULL)
;
ci ++;
}t2 = clock();
printf("--%d--", t2 - t1);//对于 循环次数多且排序搜索集合大的仍然很慢,必须用记忆搜索 内存换时间
//整形排序运用
printf("\n整形排序运用 \n");
n = 5;
for(i = 0; i < n; i ++){
arr_int[i] = rand()%100;
}arr_int[3] = 41;
for(i = 0; i < n; i ++){
printf("%d ", arr_int[i]);
}printf("\n");
qsort(arr_int, n, sizeof(arr_int[0]), compare_int);
for(i = 0; i < n; i ++){
printf("%d ", arr_int[i]);
}printf("\n");
// bsearch() 二元搜索
/*
key指向所要查找的元素,base指向进行查找的数组,nmem为查找长度,
一般为数组长度,size为每个元素所占的字节数,一般用sizeof(...)表示,
comp指向比较子函数,它定义比较的规则。需要注意的是,数据必须(注意是必须)是经过预先排序的(因为选择compace后,它默认已经排序),
而排序的规则要和comp所指向比较子函数的规则相同。如果查找成功则返回数组中匹配元素的地址,
反之则返回空。对于有多于一个的元素匹配成功的情况,bsearch()未定义返回哪一个。
cur 返回数组对于的 key指向所要查找的元素的最后出现的位置
*/
int key = 91;
int *cur;
cur = (int *)bsearch(&key, arr_int, n, sizeof(int), compare_int);
if(cur == NULL) //key在数组里面则不为BULL
printf("%d不在函数里面\n", key);
else
printf("%d在函数里面\n", key);
for(i = 0; i < n; i ++){
if(arr_int + i == cur)
printf("位子是%d\n\n", i);
}
//字符串排序运用
printf("字符串排序运用 \n");
n = 5;
for(i = 0; i < n; i ++){
printf("%s ", arr_char[i]);
}printf("\n");
qsort(arr_char, n, sizeof(arr_char[0]), compare_char);
for(i = 0; i < n; i ++){
printf("%s ", arr_char[i]);
}printf("\n");
char *cu;
char str[5] = {"cat"};
cu = (char *)bsearch(str, arr_char, n, sizeof(str), compare_char);
if(cu != NULL)
printf("yes");
return 0;
}
C语言标准函数 qsort() bsearch()
最新推荐文章于 2024-08-02 15:41:13 发布