#include <iostream>
using namespace std; //快排
void quickSort(double *q ,int n) //一个double型数组还有一个代表这个数组的位数。
{ double *left,*right;
left = &q[0];
right = &q[n-1];
double middle = q[0];
// cout<<"left指向数组第一位,值为"<<*left<<endl;
// cout<<"right指向数组最右一位,值为"<<*right<<endl;
while(left != right)
{
if (*right < middle)
{
*left = *right;
while (*left < middle)
{
left++;
if (left == right)
{
break;
}
}
*right = *left;
} else {
right--;
} }
//左右指针指向一致时把middle给这个位置
*left = middle; //接下来取得*left和*right指向数组的位数
int count = 0; //count1表示有count1个数在middle左边,最小为0
for(;q[count]<middle;count++) { }
//
//处理middle的左边
if (count>1)
{
double *qq = new double[count];
qq = q;
quickSort(qq,count);
} //处理middle的右边
int count2 = n-count-1; //count2表示有count2个数在middle右边,最小为0
if (count2 > 1)
{
double *ww = new double[count2];
ww = left+1;
quickSort(ww,count2);
} } //折半查找
void binarySearch(double *p ,int length,double g) {
bool b = false;
int left = 1,right = length;
int middle = (left + right) / 2;
if (g == p[middle-1])
{
cout<<"该数字是第"<<middle<<"位"<<endl;
} else {
while (g != p[middle-1])
{
if (left == right)
{
cout<<"该数字不在数组中"<<endl;
b = true;
break;
}
if (g>p[middle-1]) //因为数组从零开始所以减一
{
left = middle + 1;
} else {
right = middle - 1;
}
middle = (left + right) / 2;
}
if (b == false)
{
cout<<"该数字是第"<<middle<<"位"<<endl;
} }
} int main() {
cout<<"请输入数组长度";
int n;
cin>>n;
double *p = new double[n];
for (int i = 0;i<n;i++)
{
cin>>p[i];
}
quickSort(p,n);
for (int xxx = 0;xxx<n;xxx++)
{
cout<<p[xxx]<<" ";
} cout<<endl<<endl;
//设(left+right)/2是中间位置
double g;
cout<<"输入要查的数字"<<endl;
cin>>g;
binarySearch(p,n,g);
return 0;
}

结果如图

快速排序+折半查找 c++的更多相关文章

  1. 求中位数,O(n)的java实现【利用快速排序折半查找中位数】

    查找无序数组的中位数,要想时间复杂度为O(n)其实用计数排序就能很方便地实现,在此讨论使用快速排序进行定位的方法. 1.中位数定义 2.算法思想 3.Java代码实现 4.时间复杂度分析 5.附录 中 ...

  2. 冒泡排序、选择排序、直接插入排序、快速排序、折半查找>从零开始学JAVA系列

    目录 冒泡排序.选择排序.直接插入排序 冒泡排序 选择排序 选择排序与冒泡排序的注意事项 小案例,使用选择排序完成对对象的排序 直接插入排序(插入排序) 快速排序(比较排序中效率最高的一种排序) 折半 ...

  3. 折半查找,binarySearch

    折半查找法也称为二分查找法,它充分利用了元素间的次序关系,采用分治策略,可在最坏的情况下用O(log n)完成搜索任务.它的基本思想是,将n个元素分成个数大致相同的两半,取a[n/2]与欲查找的x作比 ...

  4. C语言程序设计:二分查找(折半查找)

    目录 C语言程序设计:二分查找(折半查找) 1.什么是二分查找 2.二分查找的优点 3.二分查找的缺点 4.二分查找原理 5.源代码实现 6.后话 C语言程序设计:二分查找(折半查找) 1.什么是二分 ...

  5. 算法与数据结构(九) 查找表的顺序查找、折半查找、插值查找以及Fibonacci查找

    今天这篇博客就聊聊几种常见的查找算法,当然本篇博客只是涉及了部分查找算法,接下来的几篇博客中都将会介绍关于查找的相关内容.本篇博客主要介绍查找表的顺序查找.折半查找.插值查找以及Fibonacci查找 ...

  6. 折半查找(java)(边学习边更新)

    ---恢复内容开始--- class ArrayTest3 { public static void main(String[] args) { //int [] arr=new int[]{54,4 ...

  7. C语言之实现函数返回一个数组,以及选择排序,还有折半查找。这是同学的一个作业。。。

    作业的具体要求如下: 编写一个完整的程序,实现如下功能.(1)    输入10个无序的整数.(2)    用选择排序法将以上接收的10个无序整数按从大到小的顺序排序.(3)    要求任意输入一个整数 ...

  8. c语言折半查找

    折半查找又称为二分查找,它的前提是线性表中的记录必须是有序的(通常从小到大有序),线性表必须采用顺序存储. 折半查找的基本思想是 : 在有序表中,取中间记录作为比较对象,若给定值与中间记录的关键字相等 ...

  9. 折半查找&clock函数

    #include <stdio.h>#include <time.h> #define CLOCKS_PER_SEC ((clock_t)1000) int binsearch ...

  10. 二分查找or折半查找

    package com.gxf.search; /** * 测试折半查找or二分查找 * @author xiangfei * */ public class BiSearch { /** * 非递归 ...

随机推荐

  1. 使用docker 创建6节点redis 集群 RedisCluster redis集群

    1.RedisCluster 特点(3主节点redis 集群  及6节点集群) 1.无中心节点,客户端与redis 节点直连,不需要中间代理,(有选举机制 master个数需要奇数个) 2.数据可以被 ...

  2. C语言II博客作业04

    C语言II-作业04 作业头 这个作业属于哪个课程 https://edu.cnblogs.com/campus/zswxy/SE2020-2/?page=2 这个作业要求在哪里 https://ed ...

  3. sxt_(015)_request处理表单数据及乱码

    一.request处理表单数据及乱码 1.1 处理单个表单数据用request.getParameter("x"); 1.2 处理多个表单(checkbox.select)数据用r ...

  4. 处理uniapp激励广告

    使用uniapp查看广告 激励视频广告组件.激励视频广告组件是一个原生组件,并且是一个全局单例.层级比上屏 Canvas 高,会覆盖在上屏 Canvas 上.激励视频 广告组件默认是隐藏的,需要调用 ...

  5. 批处理命令for循环(cmd命令)

    记录一下: https://www.cnblogs.com/Braveliu/p/5081087.html

  6. Wix打包升级包

    前面我们已经知道怎么制作一个完整安装包了,但我们的软件往往不能一次性就满足客户的需要,当客户需要我们给软件进行升级的时候,我们应该怎么做呢? 在这之前,我们有必要了解下Windows Installe ...

  7. csp-s2020 T2 动物园

    题目简述: 共有n个动物,m条要求,每条要求描述了第x位上是1的话,必须购买y饲料,动物园里已有的动物必须的饲料已经购买了,问题是:在不要求增加购买饲料的基础上,还能放进去多少种动物?共有k个二进制, ...

  8. PCB Layout之EMMC_Flash走线总结@@@

    PCB Layout之EMMC_Flash走线总结 1,数据线DATA[0-7]走线要(基本)等长(含芯片内部线长),线要短,线间距控制3W原则,参考面要完整(参考面下面最好不要走其它高速信号线),阻 ...

  9. OpenCv:边缘处理&Canny边缘检测

    卷积边缘: 一.在进行卷积的时候,对于原图像(1,1)的位置,左.上方没有足够的像素做卷积. 二.通常,在卷积之前,在原图增加边缘像素,比如(3*3的,增加一个像素) 三.增加像素值得处理方法,通常有 ...

  10. Jmeter接口测试+Jmeter性能测试项目实战+Jmeter性能监控分析调优01

    Jmeter P1 性能测试关键指标 1,这些指标大家看到后有什么感觉呢?对于功能测试,一般结果就两种,成功的或者是不通过的,有问题的和没问题的,有毛病的和没毛病的,比如打开网页,能打开就打开,打不开 ...