1.二分查找

针对有序数组,二分查找提供了O(logN)的时间复杂度


函数功能:给定一个整数k和一个有序数组a[],求使 ai a_i=k的下标i,如果i不在数据中,则返回-1

int BinarySearch(int *a, int len, int k)
{if (a == NULL || len <= 0)return -1;int begin = 0, end = len - 1;int mid = 0;while (begin <= end){mid = (begin + end) / 2;if (a[mid] < k)begin = mid + 1;else if (a[mid] > k)   end = mid - 1;elsereturn mid;}return mid;
}

2.快速排序(分治法)

基本思想:(1)先从数列中取出一个整数作为基准数。
(2)分区过程,将比这个数大的全部放到它的右边,小于或等于的数放在左边。
(3)重复第二步,直到各区间只有一个数
以一个数组为示例,取区间第一个数为基准数

数组下标 0 1 2 3 4 5 6 7 8 9
对应值 72 6 57 88 60 42 83 73 48 85

初始时,i=0;j=9;x=a[i]=72;从j开始向前找一个比x小或等于x的数,当j=8时,符合条件,则a[0]=a[8];i++;然后从i开始向后找一个大于x的数,当i=3时,符合条件,则a[8]=a[3];j–;重复上面的步骤,先从后向前找,再从前向后找,直到i==j,将基准数设为a[i]=x。

void QuickSort(int *a, int low, int high)
{if (low < high){int mid = a[low];int i = low, j = high;while (i < j){while (i < j && a[j] >= mid)j--;if (i < j)a[i++] = a[j];while (i < j && a[i] < mid)i++;if (i < j)a[j--] = a[i];}a[i] = mid;QuickSort(a, low, i - 1);QuickSort(a, i + 1, high);}
}

查找和排序方法归类----C和C++相关推荐

  1. 蓝桥杯:算法很美 笔记 3.查找和排序(Python实现)

    1.分治法介绍以及关键点解析 分治法(divide and conquer, D&C)∶将原问题划分成若干个规模较小而结构与原问题一致的子问题﹔递归地解决这些子问题,然后再合并其结果,就得到原 ...

  2. 数据结构——查找:折半查找、二叉查找(排序)树、平衡二叉树

    七大查找算法:https://www.cnblogs.com/zhang-qc/p/8745153.html 学习的地址 https://www.bilibili.com/video/av278314 ...

  3. CUDA(六). 从并行排序方法理解并行化思维——冒泡、归并、双调排序的GPU实现

    在第五讲中我们学习了GPU三个重要的基础并行算法: Reduce, Scan 和 Histogram,分析了 其作用与串并行实现方法. 在第六讲中,本文以冒泡排序 Bubble Sort.归并排序 M ...

  4. Python__数据结构与算法——查找与排序

    查找和排序是最基本的算法,在很多脚本中都会用到查找和排序.尽管 Python 提供的用于查找和排序的函数能够满足绝大多数需求,但还是有必要了解最基本的查找和排序算法,以便在有特殊需求的情况下,可以自己 ...

  5. #转载:十大排序方法,动图展示

    一像素 </div><div id="navigator"> 博客园 首页 新随笔 联系 订阅 管理 <div class="blogSta ...

  6. 数据结构 排序【简单排序(冒泡、插入)、希尔排序、堆排序、排序方法的综合比较、2套 排序汇总代码】

    目   录 第9章 排序(上) 9.1 简单排序(冒泡.插入) 1.前提 2.简单排序(冒泡排序) 3.简单排序(插入排序) 4.时间复杂度下界 9.2 希尔排序 9.3 堆排序 排序方法综合比较 排 ...

  7. C++ vector的初始化、添加、遍历、插入、删除、查找、排序、释放操作

    C++的vector本质上是一个动态数组,数据量不大的情况下,非常方便存储和访问操作,当然,不好的情况是数据量大的情况下,查找效率低,删除操作还会导致大量的数组移动操作. 虽然这样,vector还是一 ...

  8. 从集合中查找最值得方法——max(),min(),nlargest(),nsmallest()

    从集合中查找最值得方法有很多,常用的方法有max(),min(),nlargest(),nsmallest()等. 一.max()和min() 1.1 入门用法 直接使用max(),min(),返回可 ...

  9. 时间排序_你懂使用C ++ STL在线性时间内查找未排序数组的中位数吗

    也许你现在还在愁着学习C++?您不知道该怎么使用C++ST在线性时间内查找未排序数组的中位数,那么本文就用几组代码教您查找. 给定具有N个元素的未排序数组 arr [],任务是找出线性时间复杂度的数组 ...

最新文章

  1. WSL的openssh-server使用报错:Could not load host key: /etc/ssh/ssh_host_rsa_key
  2. 智能车竞赛技术报告 | 节能信标组 - 中国计量大学 - 赛博 - 8
  3. linux运维技巧,Linux运维需要掌握的17个实用技巧
  4. java上传csv文件上传_java处理csv文件上传示例详解
  5. oppo手机维语字体_老年人上网困难重重?学会OPPO这几个功能无后顾之忧
  6. phpcms如何做企业站-- 替换首页最初操作
  7. 360推出国内首个工业互联网安全态势感知系统
  8. VLIW的前世今生:为什么DL加速器都青睐于它
  9. [ROS Navigation Tuning Guide]翻译
  10. 10.27Unity事件、场景烘焙、Render Texture
  11. 高位在前低位在后是啥意思_详解MACD指标的死叉卖点:低位死叉+高位死叉+零轴附近死叉...
  12. python函数增强代码可读性_如何提高代码的可读性 学习笔记
  13. linux zip和gzip的区别
  14. 16天记住7000考研单词(第一天)
  15. mysql反三角函数,PostgreSQL中的函数之数学函数(正弦函数、反正弦函数、余弦函数、反余弦函数)...
  16. linux怎么烧写文件系统,烧写LINUX最小文件系统
  17. dvi dp hdmi_HDMI vs DisplayPort vs DVI:您要在新计算机上使用哪个端口?
  18. 大数据系列整个课程课程大纲
  19. iText5实现Java生成PDF文件完整版,二维码
  20. maching learning入门(一)

热门文章

  1. [转发]猎人与鸟---- 对人生很重要的一个寓言故事
  2. C#使用公共语言拓展(CLE)调用Python3(tensorflow)
  3. spark读csv文件转成map
  4. 顺丰开放平台开发者接入指引
  5. 用Java编程卫星坐标_2 分钟掌握卫星星座图
  6. 如何在运行窗口快速打开应用软件
  7. Glide加载网络图片出现模糊问题
  8. PCIe ECAM机制访问PCIE的配置空间
  9. Tomcat配置HTTP协议转HTTPS协议
  10. 《天道》解读三:什么是天道?