博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(C/C++学习)11.随机数组的快速查找
阅读量:6167 次
发布时间:2019-06-21

本文共 2442 字,大约阅读时间需要 8 分钟。

说明:利用随机函数生成一个随机数组,然后对数组进行排列,再利用二分查找快速查找一个数。

 

 

一.生成随机数组

1     time_t   ts;  2     //等价于long ts;  3     unsigned int num = time(&ts);  4     srand(num);  5     int a[10] = {0};  6     for(int i = 0;i<10;i++)  7         a[i] = rand()%100;

注意:sizeof(long) = sizeof(unsigned int) = sizeof(time_t) = 4。上述代码也可以用以下代码代替:

1     srand(time(NULL));  2     int a[10] = {0};  3     for(int  i = 0;i<10;i++)  4         a[i] = rand()%100;

 

 

二.对数组进行排列

在上一节已经叙述过快速排序的原理了,这里不再过多讲解,直接上迭代法排序代码。

1 void sortlist(int *p,int low,int high)  2 {  3     if(low < high)  4     {  5         int l = low;  6         int h = high;  7         int middle = p[low];  8         while(l
= middle && l

其中 p 为数组名,LOW为 0 ,high为数组元素个数减 1。

 

 

三.二分法快速查找

二分法查找适用于查找数据量相当大的数据库,且要求数据有序。假如对于一个有一千个数的有序数组,利用二分法查找一个数据,第一次即可筛选掉500个数据,第二次即可筛选掉250个数据,以此类推。其代码实现如下:

1 int binarysearch(int *p,int low,int high,int data)  2 {  3     if(low <= high)  4     {  5         int middle = (low + high)/2;  6         if(data == p[middle])  7         {  8             int midh = middle;  9             int midl = middle; 10             while(p[++midh] == data) 11                 printf("%d %d\n",midh,p[midh]); 12              while(p[--midl] == data) 13                  printf("%d %d\n",midl,p[midl]); 14             return middle; 15         } 16         else if(data > p[middle]) 17             return binarysearch(p,middle+1,high,data); 18         else 19             return binarysearch(p,low,middle-1,data); 20     } 21     return -1; 22 }

 

四.最后上一个示例,代码功能是生成一个随机数组,对其采用迭代法进行排序,然后利用二分法查找一个数据。

1 #include
2 #include
3 #include
4 void travelllist(int *p,int n) 5 { 6 int i = 0; 7 for(;i
= middle && l
p[middle]) 50 return binarysearch(p,middle+1,high,data); 51 else 52 return binarysearch(p,low,middle-1,data); 53 } 54 return -1; 55 } 56 57 int main() 58 { 59 int i; 60 srand(time(NULL)); 61 int arr[100] = {0}; 62 for( i = 0;i<100;i++) 63 arr[i] = rand() % 100; 64 travelllist(arr,100); 65 sortlist(arr,0,99); 66 travelllist(arr,100); 67 int data = binarysearch(arr,0,99,3); 68 if(data >= 0) 69 printf("%d %d",data,arr[data]); 70 else 71 printf("find nothing!!"); 72 return 0; 73 } 74
查看代码

转载于:https://www.cnblogs.com/tuihou/p/9775297.html

你可能感兴趣的文章
多线程依次打印abcabc
查看>>
一:学习Linux前准备工作
查看>>
how to install wireless driver for Dell 630 in Ubuntu
查看>>
Kafka 配置参数汇总及相关说明
查看>>
弄清 CSS3 的 transition 和 animation
查看>>
服务器指定网卡进行备份数据避免影响业务口
查看>>
在Sublime Text 2下面开发Sass
查看>>
四则运算个人项目3
查看>>
eclipse 构建maven web工程
查看>>
237. Delete Node in a Linked List
查看>>
[转] webpack之plugin内部运行机制
查看>>
宽字节与多字节之间的转换
查看>>
SEO的重要性
查看>>
ASP.NET 运行时详解 揭开请求过程神秘面纱
查看>>
Oracle 索引的失效检查
查看>>
C语言第五次作业--数据类型
查看>>
系统架构师-基础到企业应用架构-业务逻辑层
查看>>
高手详解SQL性能优化十条建议
查看>>
修改 IntelliJ IDEA 默认配置路径
查看>>
《现在的泪,都是当年脑子进的水》读书笔记
查看>>