#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;
}

结果如图

最新文章

  1. 后缀数组的倍增算法(Prefix Doubling)
  2. HttpResponse的使用方法
  3. (PPT)Linux服务器基础
  4. monkeyrunner API接口文档内容
  5. 【leetcode】LRU Cache(hard)★
  6. dedecms 按照栏目指定的id排序
  7. html Doctype作用?
  8. 为什么从PhoneGap中逃离
  9. Linux中的文件描述符与打开文件之间的关系------------每天进步一点点系列
  10. 制作按钮(Button)
  11. 8个不可不知的Mac OS X专用命令行工具(转)
  12. label不换行的问题
  13. css里面position:relative与position:absolute的区别
  14. js数组求差集
  15. Android自定义多宫格解锁控件
  16. [转] 解决Driver/library version mismatch
  17. [转]docker安装elk
  18. Factory——工厂方法
  19. c++中虚函数和多态性
  20. 如何安装整个linux系统中所需要的mp3播放库插件? 可以在安装rpmfusion仓库后直接通过dnf install进行按照就可以了

热门文章

  1. 「SOL」JOISC2021 解题报告
  2. JQery easyUI 滚动分页
  3. 软件工程日报八——AlertDiatog的使用
  4. [笔记] 什么是Groovy?什么是Kotlin?
  5. windows下BAT实现守护进程
  6. oracle ebs 加锁
  7. 总结ref和out的区别
  8. 像MIUI一样做Zabbix二次开发(2)——Zabbix与商业及开源产品的比较分析
  9. input点击焦点后阴影
  10. Day 22 22.2:scrapy部署