1. 二分查找法:

二分查找法是对一组有序的数字中进行查找,传递相应的数据,进行比较查找到与原数据相同的数据,查找到了返回对应的数组下标,没有找到返回-1。

二分查找法要求数据为一组有序的序列(大到小或小到大),但实际给出的数据往往是无序的,这是就需要先进行排序;排序算法有很多,但最有效、快速的当属快速排序算法。

2. 快速排序算法

1). 思想
快速排序采用的思想是分治思想。

  1. 找出一个元素(理论上元素随意)作为基准(pivot);
  2. 对数组进行分区操作,使基准左边元素的值都不大于基准值,基准右边的元素值 都不小于基准值,如此作为基准的元素调整到排序后的正确位置;
  3. 递归快速排序,将其他n-1个元素也调整到排序后的正确位置;
  4. 每个元素都是在排序后的正 确位置,排序完成.

所以快速排序算法的核心算法是分区操作,即如何调整基准的位置以及调整返回基准的最终位置以便分治递归。

2). 步骤

(本图转自 https://www.cnblogs.com/MOBIN/p/4681369.html,做部分修改)

3. 示例代码

/** This is used for bisection search* 1. sort the numbers in array* 2. bisection search the sorted array*/#include <stdio.h>
#include <string.h>
#include <stdlib.h>#define SEARCH 1
/** For sort the number array*/
int partition(int array[], int start, int end)
{int left_point, right_point;int pivot;      //Basic pointleft_point = start;right_point = end;pivot = array[left_point];while(left_point < right_point){while((right_point > left_point) && (array[right_point] >= pivot)){right_point-- ;}array[left_point] = array[right_point];while((right_point > left_point) && (array[left_point] <= pivot)){left_point++ ;}array[right_point] = array[left_point];}array[left_point] = pivot;return left_point;      //the left_point is where pivot place
}void quick_sort(int array[], int start, int end)
{if(start >= end){return ;}int mid = 0;mid = partition(array, start, end);quick_sort(array, start, mid-1);quick_sort(array, mid+1, end);
}/** Bisection of the array to search the number*/
int bisection(int array[], int key, int start, int end)
{if(start >= end){return -1;}int mid = (start+end)/2;if(array[mid] == key){return mid;}else if(array[mid] < key){bisection(array, key, mid+1, end);}else if(array[mid] > key){bisection(array, key, start, mid);}}/** Main function, only for test*/int main(int argc, char *argv[])
{int array[10] = {10,9,8,7,6,5,4,3,2,1};quick_sort(array, 0, 9);int i=0;for(i=0; i<10; i++){printf("array[%d]=%d\n",i,array[i]);}int pos=0;pos = bisection(array, SEARCH, 0, 9);if(-1 == pos){printf("There was no key=%d\n",SEARCH);}else{printf("The key=%d, pos is %d\n", SEARCH,pos);}return 0;
}

转载于:https://www.cnblogs.com/Jimmy1988/p/7838679.html

常用算法1 - 快速排序 二分查找相关推荐

  1. php快速排序分割两部分,php四大算法|冒泡排序|快速排序|二分查找

    php中有四大算法: 这种算法现在虽然用的不是太多,但面试的时候,很多人都会去问 什么叫冒泡排序法? 怎么写,写一段吧 这就是冒泡排序法,按照从大到小或从小到大的顺序进行排列. 冒泡排序法: 1.首先 ...

  2. 常用十大算法 非递归二分查找、分治法、动态规划、贪心算法、回溯算法(骑士周游为例)、KMP、最小生成树算法:Prim、Kruskal、最短路径算法:Dijkstra、Floyd。

    十大算法 学完数据结构该学什么?当然是来巩固算法,下面介绍了十中比较常用的算法,希望能帮到大家. 包括:非递归二分查找.分治法.动态规划.贪心算法.回溯算法(骑士周游为例).KMP.最小生成树算法:P ...

  3. java语言实现常用算法(排序和查找)

    以下是java语言实现的常用算法. 1.冒泡排序 /** 冒泡排序* * 有1至N个数* 第一轮比较N个数,第二轮比较N-1个数,...* 每一轮根据前面一个数和后面一个数比较,如果前者大于后者,交换 ...

  4. 插入,冒泡,选择,快速排序,二分查找

    一. 直接插入排序 void insertSort(int[] a){       for(int i=1;i<a.length; i++){            if (a[i]<a[ ...

  5. c语言二分法查找一个数_算法简解-二分查找

    读书不记录=没读,始终是我的信条·····最近因为要参加竞赛,发现自己真的差的很远,所以打算重新开始学习一遍算法及AI的相关数学知识,相信很多人都是闻数学,理工科色变,之前也是觉得上数理课太难了,真的 ...

  6. 算法前戏 递归 二分查找 列表查找

    一.递归 概念: 函数直接或者间接的调用自身算法的过程,则该函数称为递归函数.在计算机编写程序中,递归算法对解决一大类问题是十分有效的. 特点: ①递归就是在过程或者函数里调用自身. ②在使用递归策略 ...

  7. java 二分搜索获得大于目标数的第一位_程序员数据结构算法编程,二分查找搜索算法的原理与应用介绍!...

    本文来讲一种搜索算法,即二分搜索算法,通常在面试时也会被问到. 我们先来看一个例子,在图书馆通常是根据查到的编号去找书,可以在书架上按顺序一本本地查找,也可以找到一本书不符合预期时,再跳过一大部分书再 ...

  8. C++算法五:二分查找(折半)查找

    二分查找是对排序的数据进行排序,查找效率非常高. 2的20次方是100万,就是(1M),折半查找100万个数据只需要20次 2的30次方就是10亿,也就是(1G),折半查找只需要30次 #includ ...

  9. 大前端算法入门之二分查找

    现如今面试大厂的前端岗位对于应聘者的算法技巧要求越来越高,现在的前端已经不仅仅是制作页面就能够交差的,所以掌握算法技巧是很重要的,下面小千就来给大家介绍一个二分查找算法. 二分查找 所谓的算法都不是直 ...

最新文章

  1. python入门指南bl-Python Flask开源博客系统Bl
  2. 工作三年,我没给家里一分钱,还把家里掏空了
  3. 人工智能技术在智能制造中的典型应用场景与标准体系研究
  4. EntityFramework Core映射关系详解
  5. Qt工作笔记-WebEngineView调用web站点中的JS脚本(含Vue Cli脚本)
  6. NLP算法学习路线-自己整理
  7. Zookeeper应用场景
  8. 12款热门Java小游戏项目的源码和教程
  9. java中的异或运算
  10. 产品经验谈:什么是用户画像?用户画像的一些应用案例
  11. 双机热备的概念双机热备的概念
  12. 【Linux系列文章】基础与Vim
  13. 爬虫模拟登陆强智教务系统
  14. MATLAB铁轨检测+异物识别
  15. L2-039 清点代码库 - java
  16. UVa 1647 - Computer Transformation
  17. 笔记 | spark安装及入门会遇到哪些坑
  18. DeepMind用基于AI的元强化学习框架研究多巴胺在学习过程中的作用
  19. U3D-3D MAX Biped导出.fbx到Unity的Humanoid的骨架不匹配(Disable Triangle Pelvis, Enable Triangle Neck)
  20. Maven的下载和安装【详细】

热门文章

  1. java多线程图解_java多线程实例图解讲解
  2. 译林 五年级上 单词_牛津译林版九年级英语上Unit1单元重点单词、词组和句型总结...
  3. nvidia cuda工具包更新9.0版本记录
  4. 深度学习入门读书笔记:Day-14
  5. 【算法】剑指 Offer 42. 连续子数组的最大和 【重刷】
  6. 【SpringCloud】 failed to req API:/nacos/v1/ns/instance after all servers code:500 msg Read timed out
  7. 【java】Java内省Introspector
  8. 【Java】握草,你竟然在代码里下毒
  9. 【面试题】HashMap 面试 21 问
  10. 【Flink】flink Kafka报错 : Failed to send data to Kafka: This server is not the leader for that topic-pa