二分查找


func main() {
arr := []int{0, 1, 2, 3, 4, 5, 6}
fmt.Println(BinarySearch(arr, 5))
}
func BinarySearch(s []int, k int) int {
lo, hi := 0, len(s)-1
for lo <= hi {
m := (lo + hi) >> 1
if s[m] < k {
lo = m + 1
} else if s[m] > k {
hi = m - 1
} else {
return m
}
}
return -1
}

  

快速排序

func main() {
a := []int{38, 100, 4, 2, 8, 80, 10}
qsort(a, 0, len(a)-1)
fmt.Println(a)
} //快速排序 找到一个数,左边都比他小,右边都比他大
//38, 1, 4, 5, 10
func partion(a []int, i, j int) int {
//var i ,j = left,right
//1.当左边<右边
for i < j {
//2.1当右边大于左边 什么也不做
for j > i && a[j] > a[i] {
j--
}
//2.2 否则,交换位置
a[j], a[i] = a[i], a[j]
//2.3 左边都小于自己 什么也不做
for i < j && a[i] < a[j] {
i++
}
//2.4 否则交换位置
a[j], a[i] = a[i], a[j]
}
//返回的是,一个数字的正确角标,然后可以根据这个角标去划分两个区域
return i
} func qsort(a []int, left, right int) {
//如果左边等于右边,就是只有一个元素,不需要排序,直接返回
if left >= right {
return
}
mid := partion(a, left, right)
qsort(a, left, mid-1)
qsort(a, mid+1, right)
}

  

golang 快速排序及二分查找的更多相关文章

  1. C语言练习题1(关于快速排序,二分查找与运行时间)

    刚刚完成师兄给的一道题目: 随机生成10000位数,进行快速排序后,用二分查找法定位到某个要查询的数(键盘输入某个要查询的数),  结果输出查询的时间,以及是否查到 分享下自己的解题思路: 1,要懂得 ...

  2. 快速排序和二分查找(Java)

    import java.util.Arrays; public class Main { public static void main(String[] args) { int[] data = { ...

  3. 快速排序和二分查找(Javascript)

    var data = [8, 3, 4, 1, 18, 22, 11, 3, 5, 6, 2, 1, 77] quickSort(data, 0, data.length - 1) console.l ...

  4. 快速排序和二分查找(Go)

    package main import ( "fmt" "sync") var waitGroup sync.WaitGroup func main() { d ...

  5. 常用算法1 - 快速排序 & 二分查找

    1. 二分查找法: 二分查找法是对一组有序的数字中进行查找,传递相应的数据,进行比较查找到与原数据相同的数据,查找到了返回对应的数组下标,没有找到返回-1. 二分查找法要求数据为一组有序的序列(大到小 ...

  6. C# 快速排序--二分查找法--拉格朗日插值法

    1.快速排序  参考自: https://www.cnblogs.com/yundan/p/4022056.html namespace 快速排序算法 { class Program { static ...

  7. Golang实现二分查找法

    二分查找法就是实现在一组有序的数字数组集合中最快找到指定元素的下标 思路 ①先找到中间的下标middle = (leftIndex + RightIndex) /2 ,然后让中间的下标值和FindVa ...

  8. js基本算法:冒泡排序,二分查找

    知识扩充: 时间复杂度:算法的时间复杂度是一个函数,描述了算法的运行时间.时间复杂度越低,效率越高. 自我理解:一个算法,运行了几次时间复杂度就为多少,如运行了n次,则时间复杂度为O(n). 1.冒泡 ...

  9. PHP-----二维数组和二分查找

    二维数组由行和列组成.由arr[$i][$j]表示,先后表示行和列,类似于坐标点. 打印二维数组-----通过两次遍历,第一次遍历每一行,第二次遍历每一行的具体元素,并且通过使用count($arr[ ...

随机推荐

  1. Mysql 存储过程批量建表

    CREATE DEFINER=`root`@`%` PROCEDURE `createTables`() begin declare i int; declare suffix varchar(20) ...

  2. hbase基础建表语句

    在Hadoop目录下的HBASE下执行命令 ./hbase shell 进入hbase环境 创建hbase 数据库表 create "表名", "字段A",&q ...

  3. pyinstaller,scrapy和apscheduler

    一.scrapy拉起方式 1. 简单cmd拉起 from scrapy.cmdline import execute spiders = [ 'scrapy crawl liepin', 'scrap ...

  4. 20175126《Java程序设计》第三学习总结

    # 20175126 2016-2017-2 <Java程序设计>第三周学习总结 ##课余收获——利用JAVA编写最简单的斗地主程序 -由于最近身边的朋友都在玩手机上的斗地主小游戏,我也就 ...

  5. Windows学习"Network Analysis in Python"

    原代码仓库的地址为 Network Analysis in Python. 主要按照里面的README.md 进行操作,全部仓库有100MB以上.考虑到数据比较大,再加上我对原笔记文件有修改,建议从我 ...

  6. 关于vue中tamplate和DOM节点浅谈

    前言:在开发前段页面使用vue时,我们能经常看到template标签.这里粗略讲下自己对vue中template理解和使用. 1. 先了解vue vue.js是一个轻巧.高性能.壳组件画的MVVM库. ...

  7. 如何解决出现AXIOS的跨域问题:Request header field Content-Type is not allowed by Access-Control-Allow-Headers in preflight response.

    转载:https://www.cnblogs.com/caimuqing/p/6733405.html 问题描述: 由于restful接口需要在头部header传递两个字段: Content-Type ...

  8. (C#)日志接口请求响应时间

    日志接口响应时间,记录接口请求信息,响应结果以及响应时间等.可以清楚的分析和了解接口状态. 如果一个一个地在接口下面做日志,那不是我们想要的结果.所以,我们选择做一个特性来控制接口要不要记录请求响应日 ...

  9. 分析easyswoole3.0源码,服务启动为例(二)

    以下内容需要结合es的源码,不然可能会觉得跳跃.先描述下es启动的大致流程.es启动的时候注册异常处理函数以及加载配置文件.根据位置文件的设置选择启动哪种swoole服务.然后用一个事件注册类,注册s ...

  10. python json.dumps()函数输出json格式,使用ensure_ascii参数对中文输入的支持

    在python使用过程中,输入中文,不能正常的输出,可以使用ensure_ascii参数来解决不能输入中文的问题 代码块: import json friends={"name": ...