快速排序+折半查找 c++
#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++的更多相关文章
- 求中位数,O(n)的java实现【利用快速排序折半查找中位数】
查找无序数组的中位数,要想时间复杂度为O(n)其实用计数排序就能很方便地实现,在此讨论使用快速排序进行定位的方法. 1.中位数定义 2.算法思想 3.Java代码实现 4.时间复杂度分析 5.附录 中 ...
- 冒泡排序、选择排序、直接插入排序、快速排序、折半查找>从零开始学JAVA系列
目录 冒泡排序.选择排序.直接插入排序 冒泡排序 选择排序 选择排序与冒泡排序的注意事项 小案例,使用选择排序完成对对象的排序 直接插入排序(插入排序) 快速排序(比较排序中效率最高的一种排序) 折半 ...
- 折半查找,binarySearch
折半查找法也称为二分查找法,它充分利用了元素间的次序关系,采用分治策略,可在最坏的情况下用O(log n)完成搜索任务.它的基本思想是,将n个元素分成个数大致相同的两半,取a[n/2]与欲查找的x作比 ...
- C语言程序设计:二分查找(折半查找)
目录 C语言程序设计:二分查找(折半查找) 1.什么是二分查找 2.二分查找的优点 3.二分查找的缺点 4.二分查找原理 5.源代码实现 6.后话 C语言程序设计:二分查找(折半查找) 1.什么是二分 ...
- 算法与数据结构(九) 查找表的顺序查找、折半查找、插值查找以及Fibonacci查找
今天这篇博客就聊聊几种常见的查找算法,当然本篇博客只是涉及了部分查找算法,接下来的几篇博客中都将会介绍关于查找的相关内容.本篇博客主要介绍查找表的顺序查找.折半查找.插值查找以及Fibonacci查找 ...
- 折半查找(java)(边学习边更新)
---恢复内容开始--- class ArrayTest3 { public static void main(String[] args) { //int [] arr=new int[]{54,4 ...
- C语言之实现函数返回一个数组,以及选择排序,还有折半查找。这是同学的一个作业。。。
作业的具体要求如下: 编写一个完整的程序,实现如下功能.(1) 输入10个无序的整数.(2) 用选择排序法将以上接收的10个无序整数按从大到小的顺序排序.(3) 要求任意输入一个整数 ...
- c语言折半查找
折半查找又称为二分查找,它的前提是线性表中的记录必须是有序的(通常从小到大有序),线性表必须采用顺序存储. 折半查找的基本思想是 : 在有序表中,取中间记录作为比较对象,若给定值与中间记录的关键字相等 ...
- 折半查找&clock函数
#include <stdio.h>#include <time.h> #define CLOCKS_PER_SEC ((clock_t)1000) int binsearch ...
- 二分查找or折半查找
package com.gxf.search; /** * 测试折半查找or二分查找 * @author xiangfei * */ public class BiSearch { /** * 非递归 ...
随机推荐
- Java基础学习:11、断点调试
1.可以用来查看错误以及查看代码的运行过程. 2.如何使用:
- Excel如何按名字提取另一张表上数据(跨表查询)
1.Excel如何按名字提取另一张表上数据(跨表查询) 公式"=VLOOKUP(A3,[工资信息.xls]Sheet1!$A$3:$B$32,2,0)"原理. 1."A3 ...
- sdio 移植st官方例程 stm32f103
第一步:建立驱动文件 建立sdio_sdcard.h和sdio_sdcard.c,并将这两个文件添加到MDK工程中,如下图 第二步:移植官方例程 1.找到STM32F10x_StdPeriph_Lib ...
- windows远程桌面之前用于连接到xxx的凭据无法工作
使用windows远程桌面连接时报错提示: 之前用于连接到xxx的凭据无法工作 确认输入的用户名密码没有问题 解决方法: 打开gpedit.msc组策略管理,依次找到 计算机配置 > windo ...
- the origin of month name in English
序号 月份 简述 详述 1 January Janus神 罗马神话的神Janus,双面,门神 2 February Februa节 古罗马人都要杀牲饮酒,欢庆菲勃卢姆节(Februarius).忏悔自 ...
- jsonpath表达式
JsonPath是一种简单的方法来提取给定JSON文档的部分内容,其中正则表达式的包含或不包含配制有时候非常有用! json操作实例 { "store": { "book ...
- allure环境配置生成测试报告
一.pycharm中安装下载allure:pip install allure-pytest.或者设置里面添加allure-pytest搜索安装 二.电脑中配置allure系统环境变量: allure ...
- Linux上面配置Apache2支持Https(ssl)具体方案实现
虽然Nginx比较流行,但是由于一些老项目用到了Apache2来支持Web服务,最近想给服务上一个Https支持,虽然看似教程简单,但是也遇到一些特殊情况,经历了一番折腾也算是解决了所有问题,将过程记 ...
- django连接ubuntu22下的mysql8
1.安装mysql(这里就不过多赘述了) sudo apt-get install mysql-server 2.登录mysql (1) 在 根目录/etc/mysql/debian.cnf ,使 ...
- Java8 提供CompletableFuture来简化高并发异步处理编程
(摘录自狂乱的贵公子)所谓异步调用其实就是实现一个可无需等待被调用函数的返回值而让操作继续运行的方法.在 Java 语言中,简单的讲就是另启一个线程来完成调用中的部分计算,使调用继续运行或返回,而不需 ...