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

一.生成随机数组

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

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

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

二.对数组进行排列

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

 void sortlist(int *p,int low,int high)
{
if(low < high)
{
int l = low;
int h = high;
int middle = p[low];
while(l<h)
{
while(p[h] >= middle && l<h)
h--;
p[l] = p[h];
while(p[l] <= middle && l<h)
l++;
p[h] = p[l];
}
p[h] = middle;
sortlist(p,low,h-1);
sortlist(p,h+1,high);
}
}

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

三.二分法快速查找

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

 int binarysearch(int *p,int low,int high,int data)
{
if(low <= high)
{
int middle = (low + high)/2;
if(data == p[middle])
{
int midh = middle;
int midl = middle;
while(p[++midh] == data)
printf("%d %d\n",midh,p[midh]);
while(p[--midl] == data)
printf("%d %d\n",midl,p[midl]);
return middle;
}
else if(data > p[middle])
return binarysearch(p,middle+1,high,data);
else
return binarysearch(p,low,middle-1,data);
}
return -1;
}

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

 #include<stdio.h>
#include<time.h>
#include<stdlib.h>
void travelllist(int *p,int n)
{
int i = 0;
for(;i<n;i++)
printf("%d ",p[i]);
putchar(10);
} void sortlist(int *p,int low,int high)
{
if(low < high)
{
int l = low;
int h = high;
int middle = p[low];
while(l<h)
{
while(p[h] >= middle && l<h)
h--;
p[l] = p[h];
while(p[l] <= middle && l<h)
l++;
p[h] = p[l];
}
p[h] = middle;
sortlist(p,low,h-1);
sortlist(p,h+1,high);
}
} int binarysearch(int *p,int low,int high,int data)
{
if(low <= high)
{
int middle = (low + high)/2;
if(data == p[middle])
{
int midh = middle;
int midl = middle;
while(p[++midh] == data)
printf("%d %d\n",midh,p[midh]);
while(p[--midl] == data)
printf("%d %d\n",midl,p[midl]);
return middle;
}
else if(data > p[middle])
return binarysearch(p,middle+1,high,data);
else
return binarysearch(p,low,middle-1,data);
}
return -1;
} int main()
{
int i;
srand(time(NULL));
int arr[100] = {0};
for( i = 0;i<100;i++)
arr[i] = rand() % 100;
travelllist(arr,100);
sortlist(arr,0,99);
travelllist(arr,100);
int data = binarysearch(arr,0,99,3);
if(data >= 0)
printf("%d %d",data,arr[data]);
else
printf("find nothing!!");
return 0;
}

查看代码

(C/C++学习)11.随机数组的快速查找的更多相关文章

  1. hash数组快速查找一个字符串中出现最多的字符,并统计出现的次数

    如何快速查找一个字符串中出现最多的字符,并统计出现的次数? 可以使用hash数组,也就是关联数组实现快速查找功能. function seek(str) { var hash = []; var ma ...

  2. Javascript经典算法学习1:产生随机数组的辅助类

    辅助类 在几个经典排序算法学习部分,为方便统一测试不同算法,新建了一个辅助类,主要功能为:产生指定长度的随机数组,提供打印输出数组,交换两个元素等功能,代码如下: function ArraySort ...

  3. 给深度学习入门者的Python快速教程 - numpy和Matplotlib篇

    始终无法有效把word排版好的粘贴过来,排版更佳版本请见知乎文章: https://zhuanlan.zhihu.com/p/24309547 实在搞不定博客园的排版,排版更佳的版本在: 给深度学习入 ...

  4. 给深度学习入门者的Python快速教程

    给深度学习入门者的Python快速教程 基础篇 numpy和Matplotlib篇 本篇部分代码的下载地址: https://github.com/frombeijingwithlove/dlcv_f ...

  5. 给深度学习入门者的Python快速教程 - 番外篇之Python-OpenCV

    这次博客园的排版彻底残了..高清版请移步: https://zhuanlan.zhihu.com/p/24425116 本篇是前面两篇教程: 给深度学习入门者的Python快速教程 - 基础篇 给深度 ...

  6. Java编程思想学习(十二) 数组和容器

    一.数组 1).数组的多种初始化方式 下面总结了初始化数组的多种方式,以及如何对指向数组的引用赋值,使其指向另一个数组对象.值得注意的是:对象数组和普通数组的各种操作基本上都是一样的:要说有什么不同的 ...

  7. (私人收藏)[开发必备]最全Java离线快速查找手册(可查询可学习,带实例)

    (私人收藏)[开发必备]最全Java离线快速查找手册(可查询可学习,带实例) https://pan.baidu.com/s/1L54VuFwCdKVnQGVc8vD1TQnwmj java手册 Ja ...

  8. JavaScript 实现彩票中随机数组的获取

    1.效果图: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UT ...

  9. JavaScript学习11 数组排序实例

    JavaScript学习11 数组排序实例 数组声明 关于数组对象的声明,以前说过:http://www.cnblogs.com/mengdd/p/3680649.html 数组声明的一种方式: va ...

随机推荐

  1. WCF问题集锦:ReadResponse failed: The server did not return a complete response for this request.

    今日.对代码进行单元測试时.发现方法GetAllSupplyTypes报例如以下错误: [Fiddler] ReadResponse() failed: The server did not retu ...

  2. bzoj2648

    http://www.lydsy.com/JudgeOnline/problem.php?id=2648 kdtree裸题... 抄板子一边抄对了... 挺好理解的,就是说我们先找出中间的元素,然后小 ...

  3. Istio 1.1部署实践

    前提条件 正确安装配置Kubernetes集群 CentOS Linux release 7.5.1804 安装 下载istio 1.1版本 [root@vm157 ~]# wget https:// ...

  4. A Few Words on Callbacks and Asynchronous Mechanism In Javascript

    It is said that the one of the most routine work a javascript programmer do is writing codes like &q ...

  5. Windows(7/8/10)搭建kibana 6.x版本(elasticsearch的可视化服务)

    在搭建kibana之前,我们先了解下什么是kibana Kibana 是一款开源的数据分析和可视化平台,它是 Elastic Stack 成员之一,设计用于和 Elasticsearch 协作.您可以 ...

  6. ajax 以json 的形式来传递返回参数的实例

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="TestWcf.aspx.c ...

  7. 最少拦截系统------LCS--------动态规划

    这是一道极好的题,会了这个应该说 最长递增子序列什么的  就有了另外一种思路了 下面附上代码---应该仔细的看一下  那个  if判断 #include<stdio.h> #include ...

  8. PHP入门开发

    1.下载开发工具phpstorm 地址:http://www.jetbrains.com/phpstorm/download/download-thanks.html?platform=windows ...

  9. CTSC+APIO+THUACM游记

    退役之前,写点破事乐呵乐呵.. (同DaD3zZ) CTSC Day0 来到丽都 哈哈哈这可是四星级豪华酒店啊   想想要在这住7天  美滋滋 换了半天的房间 也没有换到一起   最后yzy& ...

  10. Spring思维课程导图——bean得实例化和bean的管理