查找和排序方法归类----C和C++
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++相关推荐
- 蓝桥杯:算法很美 笔记 3.查找和排序(Python实现)
1.分治法介绍以及关键点解析 分治法(divide and conquer, D&C)∶将原问题划分成若干个规模较小而结构与原问题一致的子问题﹔递归地解决这些子问题,然后再合并其结果,就得到原 ...
- 数据结构——查找:折半查找、二叉查找(排序)树、平衡二叉树
七大查找算法:https://www.cnblogs.com/zhang-qc/p/8745153.html 学习的地址 https://www.bilibili.com/video/av278314 ...
- CUDA(六). 从并行排序方法理解并行化思维——冒泡、归并、双调排序的GPU实现
在第五讲中我们学习了GPU三个重要的基础并行算法: Reduce, Scan 和 Histogram,分析了 其作用与串并行实现方法. 在第六讲中,本文以冒泡排序 Bubble Sort.归并排序 M ...
- Python__数据结构与算法——查找与排序
查找和排序是最基本的算法,在很多脚本中都会用到查找和排序.尽管 Python 提供的用于查找和排序的函数能够满足绝大多数需求,但还是有必要了解最基本的查找和排序算法,以便在有特殊需求的情况下,可以自己 ...
- #转载:十大排序方法,动图展示
一像素 </div><div id="navigator"> 博客园 首页 新随笔 联系 订阅 管理 <div class="blogSta ...
- 数据结构 排序【简单排序(冒泡、插入)、希尔排序、堆排序、排序方法的综合比较、2套 排序汇总代码】
目 录 第9章 排序(上) 9.1 简单排序(冒泡.插入) 1.前提 2.简单排序(冒泡排序) 3.简单排序(插入排序) 4.时间复杂度下界 9.2 希尔排序 9.3 堆排序 排序方法综合比较 排 ...
- C++ vector的初始化、添加、遍历、插入、删除、查找、排序、释放操作
C++的vector本质上是一个动态数组,数据量不大的情况下,非常方便存储和访问操作,当然,不好的情况是数据量大的情况下,查找效率低,删除操作还会导致大量的数组移动操作. 虽然这样,vector还是一 ...
- 从集合中查找最值得方法——max(),min(),nlargest(),nsmallest()
从集合中查找最值得方法有很多,常用的方法有max(),min(),nlargest(),nsmallest()等. 一.max()和min() 1.1 入门用法 直接使用max(),min(),返回可 ...
- 时间排序_你懂使用C ++ STL在线性时间内查找未排序数组的中位数吗
也许你现在还在愁着学习C++?您不知道该怎么使用C++ST在线性时间内查找未排序数组的中位数,那么本文就用几组代码教您查找. 给定具有N个元素的未排序数组 arr [],任务是找出线性时间复杂度的数组 ...
最新文章
- WSL的openssh-server使用报错:Could not load host key: /etc/ssh/ssh_host_rsa_key
- 智能车竞赛技术报告 | 节能信标组 - 中国计量大学 - 赛博 - 8
- linux运维技巧,Linux运维需要掌握的17个实用技巧
- java上传csv文件上传_java处理csv文件上传示例详解
- oppo手机维语字体_老年人上网困难重重?学会OPPO这几个功能无后顾之忧
- phpcms如何做企业站-- 替换首页最初操作
- 360推出国内首个工业互联网安全态势感知系统
- VLIW的前世今生:为什么DL加速器都青睐于它
- [ROS Navigation Tuning Guide]翻译
- 10.27Unity事件、场景烘焙、Render Texture
- 高位在前低位在后是啥意思_详解MACD指标的死叉卖点:低位死叉+高位死叉+零轴附近死叉...
- python函数增强代码可读性_如何提高代码的可读性 学习笔记
- linux zip和gzip的区别
- 16天记住7000考研单词(第一天)
- mysql反三角函数,PostgreSQL中的函数之数学函数(正弦函数、反正弦函数、余弦函数、反余弦函数)...
- linux怎么烧写文件系统,烧写LINUX最小文件系统
- dvi dp hdmi_HDMI vs DisplayPort vs DVI:您要在新计算机上使用哪个端口?
- 大数据系列整个课程课程大纲
- iText5实现Java生成PDF文件完整版,二维码
- maching learning入门(一)