#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. 「SOL」打扫笛卡尔cartesian (模拟赛)

    为什么会有人推得出来第三题想不出来签到题啊 (⊙_⊙)? 题面 有一棵有根树 \(T\).从根节点出发,在点 \(u\) 时,设点 \(u\) 还有 \(d\) 个未访问过的儿子,则有 \(\frac ...

  2. 25_Webapck原理

    Webpack源代码解析 webpack其实也就是一个函数的调用,返回一个Compile的对象,再调用Compile的run方法就可以完成项目的构建 那么我们肯定是先要从webpack这个函数去理解它 ...

  3. 1、app自动化的底层逻辑,adb及monkey和稳定性测试

    app自动化的过程中,底层逻辑是计算机通过adb与移动设备进行沟通,告诉移动设备,进行什么操作: 一.概念: Andriod调试桥(adb),是一种命令行工具,可以让我们与设备进行通讯. 二.adb安 ...

  4. IDEA中常见问题

    idea中不存在.iml文件项目主目录下执行命令行mvn idea:module

  5. Tomcat异常处理机制

    声明 源码基于Spring Boot 2.3.12中依赖的Tomcat 异常例子 tomcat中返回错误页面目前主要是以下两种情况. 执行servlet发生异常 程序中主动调用response.sen ...

  6. Linux Shell开发功能点

    背景 需要操作一批次服务器安装Docker 功能特色 一键执行 bash <(curl -s -L http://server.com/installDocker.sh) MemberNode ...

  7. 【Quartus系列】实验一: 3-8译码器(原理图输⼊设计)

    实验一: 3-8译码器(原理图输⼊设计) ⼀:实验⽬的 1. 了解3-8译码器的电路原理,掌握组合逻辑电路的设计⽅法 2. 掌握QuartusII软件原理图输⼊设计的流程 ⼆:实验内容 2.1设计输⼊ ...

  8. 使用 p7zip 加密解密

    1. 安装 yum install p7zip p7zip-plugins 2. 加密打包 7z a -ptest test.7z test.php -p 密码 test.php 可以是目录 或者 多 ...

  9. 一种简单方便的postgresql插件multicorn安装方法 ---yum install multicorn10.x86_64

    Yum 安装multicorn的方法,一下子解决了之前make&make install方式安装的各种问题必须记录一下. 1.yum search multicorn----找到需要的包 2. ...

  10. css如何将content、background、background-image生成的背景进行翻转

    方法 transform: scaleX(-1); 本例是水平翻转180度,方向可修改X为Y/Z. 注意如果是content,需要设置display: inline-block/block;