Golang的排序和查找

                                      作者:尹正杰

版权声明:原创作品,谢绝转载!否则将追究法律责任。

一.排序的基本介绍

  排序是将一组数据,依指定的顺序进行排列的过程。排序的分类如下

1>.内部排序

  指将需要处理的所有数据都家在到内存存储器中进行排序,其中包括交换式排序法,选择式排序法和插入式排序法。

2>.外部排序法

  数据量过大,无法全部加载到内存中,需要借助外部存储进行排序,其中包括合并排序法和直接合并排序法。

二.冒泡排序

1>.冒泡排序基本思想

  通过对待排序序列从前向后(从下标较大的元素开始),一次比较相邻元素的排序码,若发现逆序则交换,使排序码较小的元素逐渐从后部移向前部(从下标较大的单元移向下标较小的单元),就像水底下的气泡一样逐渐向上冒。

  因为排序过程的过程中,各元素不断接近自己的位置,如果一趟比较下来没有进行过交换,就说明序列有序,因此要在排序过程中设置一个标志flag判断元素是否进行过交换。从而减少不必要的比较(优化)。

2>.代码实现

  1. package main
  2.  
  3. import(
  4. "fmt"
  5. )
  6.  
  7. func BubbleSort(arr *[8]int){
  8. fmt.Println("排序前arr=",(*arr))
  9. temp := 0
  10.  
  11. for i :=0;i<len(*arr) -1;i++{
  12. for j := 0;j<len(*arr)-1 -i;j++{
  13. if(*arr)[j] > (*arr)[j+1]{
  14. temp =(*arr)[j]
  15. (*arr)[j] = (*arr)[j+1]
  16. (*arr)[j+1] = temp
  17. }
  18. }
  19. }
  20. fmt.Println("排序后arr=",(*arr))
  21. }
  22.  
  23. func main(){
  24. arr := [8]int{14,51,32,98,24,118,35,26}
  25. BubbleSort(&arr)
  26. fmt.Println("main arr=",arr)
  27. }

bubbling.go

三.查找

1>.查找介绍

  在Golang中,我们常用的查找有两种:顺序查找和二分查找(该数组是有序)。

2>.顺序查找案例

  1. package main
  2.  
  3. import (
  4. "fmt"
  5. )
  6.  
  7. func main(){
  8. Names := [5]string{"孙悟空","唐三藏","猪八戒","沙和尚","白龙马"}
  9. var searchName = ""
  10. fmt.Println("请输入要查找的人名>>>")
  11. fmt.Scanln(&searchName)
  12.  
  13. //顺序查找:第一种方式
  14. for index:=0;index<len(Names);index++{
  15. if searchName == Names[index]{
  16. fmt.Printf("找到%v,下标%v \n",searchName,index)
  17. break
  18. }else if index == (len(Names)-1){
  19. fmt.Printf("没有找到%v \n",searchName)
  20. }
  21. }
  22.  
  23. //顺序查找:第二种方式(推荐)
  24. index2 := -1
  25. for i := 0;i<len(Names);i++{
  26. if searchName == Names[i]{
  27. index2 = i
  28. break
  29. }
  30. }
  31.  
  32. if index2 != -1{
  33. fmt.Printf("找到%v,下标%v \n",searchName,index2)
  34. }else{
  35. fmt.Printf("没有找到%v \n",searchName)
  36. }
  37. }

sequential.go

3>.二分查找案例

  请对一个有序数组进行二分查找{1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192} ,输入一个数看看该数组是否存 在此数,并且求出下标,如果没有就提示"找不到"。
  1. package main
  2.  
  3. import (
  4. "fmt"
  5. "strconv"
  6. )
  7.  
  8. func BinaryFind(arr *[14]int, leftIndex int, rightIndex int, findVal int) {
  9. //判断 leftIndex 是否大于 rightIndex
  10. if leftIndex > rightIndex {
  11. fmt.Println("找不到")
  12. return
  13. }
  14. //先找到 中间的下标
  15. middle := (leftIndex + rightIndex) / 2
  16. if (*arr)[middle] > findVal {
  17. //说明我们要查找的数,应该在
  18. BinaryFind(arr, leftIndex, middle - 1, findVal)
  19. } else if (*arr)[middle] < findVal {
  20. //说明我们要查找的数,应该在 middel+1 --- rightIndex
  21. BinaryFind(arr, middle + 1, rightIndex, findVal)
  22. } else {
  23. //找到了
  24. fmt.Printf("找到了,下标为%v \n", middle)
  25. }
  26. }
  27.  
  28. func main() {
  29. arr := [14]int{1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192}
  30. var searchName = ""
  31. fmt.Println("请输入要查找的数字>>>")
  32. fmt.Scanln(&searchName)
  33. input,_ := strconv.Atoi(searchName)
  34. BinaryFind(&arr, 0, len(arr) -1, input)
  35. }

binarySearch.go

Golang的排序和查找的更多相关文章

  1. golang数组 排序和查找

    package main import "fmt" func BubbleSort(arr *[5]int){ fmt.Println("排序前arr=",(* ...

  2. C++ 排序、查找的应用

    // order.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include "string.h" #includ ...

  3. leetcode题解:Search in Rotated Sorted Array(旋转排序数组查找)

    题目: Suppose a sorted array is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 4 5 6 7  ...

  4. 006-筛选分类排序搜索查找Filter-Classificatio-Sort-Search-Find-Seek-Locate

    006-筛选分类排序搜索查找Filter-Classificatio-Sort-Search-Find-Seek-Locate https://www.cnblogs.com/delphixx/p/1 ...

  5. UVA.10474 Where is the Marble ( 排序 二分查找 )

    UVA.10474 Where is the Marble ( 排序 二分查找 ) 题意分析 大水题一道.排序好找到第一个目标数字的位置,返回其下标即可.暴力可过,强行写了一发BS,发现错误百出.应了 ...

  6. vector向量容器元素排序与查找

    1.利用标准库函数sort()对vector进行排序 参考源码: #include <algorithm> #include <vector> vector<int> ...

  7. 九度OJ 1174:查找第K小数 (排序、查找)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:6376 解决:2539 题目描述: 查找一个数组的第K小的数,注意同样大小算一样大.  如  2 1 3 4 5 2 第三小数为3. 输入: ...

  8. NumPy 排序、查找、计数

    章节 Numpy 介绍 Numpy 安装 NumPy ndarray NumPy 数据类型 NumPy 数组创建 NumPy 基于已有数据创建数组 NumPy 基于数值区间创建数组 NumPy 数组切 ...

  9. 基于python常用排序与查找

    """ 排序与查找 -- 冒泡排序 -- 选择排序 -- 快速排序 --****经典 -- 希尔排序 """ # 常用排序的实现 # 冒泡排 ...

随机推荐

  1. Editor markdown编辑器

    代码示例网址:http://pandao.github.io/editor.md/examples/index.html 引入文件 <link rel="stylesheet" ...

  2. 常用的redis服务命令。

    卸载服务:redis-server --service-uninstall 开启服务:redis-server --service-start 停止服务:redis-server --service- ...

  3. HDU1075 字典树板子题

    题意 :给出两组字符串 一一映射,给出一种组成的文字,要求映射成另外一种思路:使用字典树,把映射的另外一个字符存在字典树的单词节点处  例如 abc   123 则把123存在abc节点中的c处即可 ...

  4. BZOJ2212 [POI2011] Tree Rotations 【treap】

    题目分析: 写的无旋treap应该跑不过,但bzoj判断的总时限.把相关实现改成线段树合并就可以了. 代码: #include<bits/stdc++.h> using namespace ...

  5. 【HDU - 5845】Best Division(xor-trie、01字典树、dp)

    BUPT2017 wintertraining(15) #7E 题意 把数组A划分为k个区间,每个区间不超过L长度,每一个区间异或和之和为S.现在求:S不超过X,区间个数的最大值. 且A是这样给你的: ...

  6. vim 高级编辑技巧

    建议参考IBM官方文档https://www.ibm.com/developerworks/cn/linux/l-cn-tip-vim/ 重新输入以前输入过的某条命令Ctrl + r 全局替换格式:& ...

  7. Centos7安装OpenDCIM-19.01步骤

    Centos7安装OpenDCIM-19.01步骤 openDCIM是一款免费的开源解决方案,用于管理数据中心基础设施.它已经被几家企业组织所使用,由于开发人员的不懈努力,正在迅速完善. openDC ...

  8. 2018-2019 ACM-ICPC Pacific Northwest Regional Contest C Contest Setting(DP)

    比赛链接:Contest Setting C题 题意:$n$道题目,每道题目难度为$ai$,选择$k$道难度不同的题目,有多少种选择方案.$1<=k<=n<=1000,1<=a ...

  9. [JSOI2008]Blue Mary的职员分配

    由于Blue Mary呕心沥血的管理,Blue Mary的网络公司蒸蒸日上.现在一共拥有了n名职员,可惜没有任何的金钱和声誉.平均每名每天职员都可以给公司带来x单位金钱或者y单位声誉(名利不能双全). ...

  10. QML-关于Qt.rgba()颜色无法正常显示问题

    GitHub:八至 作者:狐狸家的鱼 本文链接:关于Qt.rgba()颜色的正确写法 当在正常给color属性写颜色的时候,用十六进制能正常显示,但是用Qt.rgba()时,颜色无法正常显示出来. 按 ...