快速排序+折半查找 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 { /** * 非递归 ...
随机推荐
- 外卖小项目(SpringBook)
一.创建项目,配置maven 二.写配置文件application.yml 三.编写项目启动类 四.设置静态资源路径 基础环境搭建完毕
- Linux 第五节(特殊权限,隐藏权限,SU,SUDO,FHS文件系统层次化标准)
特殊权限 SUID 执行者临时获取命令的所有权限(对程序进行设置) SGID 目录内新文件所有组,继承原有目录所有组的名称 SBID 粘滞位,保护位 chmod +权限 文件 chmod ...
- typora文件中不显示公式
行内公式在typora中不显示 解决办法 打开typora--文件(F)--偏好设置--markdown--内联公式--打勾选中 若改后没有反应,关闭重新打开.
- (0619) 电脑 传 ipad
- 掌控安全学院SQL注入靶场-布尔盲注(二)
首页打开如下 判断注入 闭合报错 先判断数据库的长度....
- Salesforce 发送Email时遇到的问题(Case当中的Filed不出现Email选项:ケースのフィールドにメールタブが表示されない)。
普段はケースの発生源はメールと選択する場合.ディフォルトで「フィールド」の中に「メール」というタブが出てきますが. (平时当我们选择[Case]的[来源]为[Email]时,默认就会在field中出现 ...
- java annotation(如何创建新的注解)小结
"注解"有三种 1:无实际参数,只有声明 2:只存在单一参数,有些像方法调用 3:有多个参数 标准的"注解"就先不总结了. 想总结一下<如何创建自己的注解 ...
- C# 当页面有很多选择条件时的处理方式
如下图,用户可能输入很多条件 在后端的处理方式: 使用键值对 private Dictionary<string, string> CreatSearchPara() { Dictiona ...
- grep 查找字符串 在文件或者文件夹中
1, 命令行能做的事情很多, grep 'XXX' ./access.log 当前某个文件下下查找某个字符串grep 'xxx' ./ -r 当前目录文件夹下查找某个字符串
- CAD坐标显示不全怎么办?CAD坐标常见问题解答!
今天小编来和大家聊一下浩辰CAD看图王中关于CAD坐标的那些事,比如:CAD坐标为何显示不全?CAD坐标显示结果和之前不一样?以及不能精准捕捉CAD坐标等情况,应该如何轻松解决?今天就和小编一起来了解 ...