Golang的排序和查找

                                      作者:尹正杰

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

一.排序的基本介绍

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

1>.内部排序

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

2>.外部排序法

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

二.冒泡排序

1>.冒泡排序基本思想

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

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

2>.代码实现

 package main

 import(
"fmt"
) func BubbleSort(arr *[8]int){
fmt.Println("排序前arr=",(*arr))
temp := 0 for i :=0;i<len(*arr) -1;i++{
for j := 0;j<len(*arr)-1 -i;j++{
if(*arr)[j] > (*arr)[j+1]{
temp =(*arr)[j]
(*arr)[j] = (*arr)[j+1]
(*arr)[j+1] = temp
}
}
}
fmt.Println("排序后arr=",(*arr))
} func main(){
arr := [8]int{14,51,32,98,24,118,35,26}
BubbleSort(&arr)
fmt.Println("main arr=",arr)
}

bubbling.go

三.查找

1>.查找介绍

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

2>.顺序查找案例

package main

import (
"fmt"
) func main(){
Names := [5]string{"孙悟空","唐三藏","猪八戒","沙和尚","白龙马"}
var searchName = ""
fmt.Println("请输入要查找的人名>>>")
fmt.Scanln(&searchName) //顺序查找:第一种方式
for index:=0;index<len(Names);index++{
if searchName == Names[index]{
fmt.Printf("找到%v,下标%v \n",searchName,index)
break
}else if index == (len(Names)-1){
fmt.Printf("没有找到%v \n",searchName)
}
} //顺序查找:第二种方式(推荐)
index2 := -1
for i := 0;i<len(Names);i++{
if searchName == Names[i]{
index2 = i
break
}
} if index2 != -1{
fmt.Printf("找到%v,下标%v \n",searchName,index2)
}else{
fmt.Printf("没有找到%v \n",searchName)
}
}

sequential.go

3>.二分查找案例

  请对一个有序数组进行二分查找{1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192} ,输入一个数看看该数组是否存 在此数,并且求出下标,如果没有就提示"找不到"。
package main

import (
"fmt"
"strconv"
) func BinaryFind(arr *[14]int, leftIndex int, rightIndex int, findVal int) {
//判断 leftIndex 是否大于 rightIndex
if leftIndex > rightIndex {
fmt.Println("找不到")
return
}
//先找到 中间的下标
middle := (leftIndex + rightIndex) / 2
if (*arr)[middle] > findVal {
//说明我们要查找的数,应该在
BinaryFind(arr, leftIndex, middle - 1, findVal)
} else if (*arr)[middle] < findVal {
//说明我们要查找的数,应该在 middel+1 --- rightIndex
BinaryFind(arr, middle + 1, rightIndex, findVal)
} else {
//找到了
fmt.Printf("找到了,下标为%v \n", middle)
}
} func main() {
arr := [14]int{1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192}
var searchName = ""
fmt.Println("请输入要查找的数字>>>")
fmt.Scanln(&searchName)
input,_ := strconv.Atoi(searchName)
BinaryFind(&arr, 0, len(arr) -1, input)
}

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. js 异步代码

    这段时间一直在用node.js做毕设的后台,所以需要一些异步代码操作,主要的异步方式有:Promise.Generator 和 async / await,但下面主要讲 Promise 和 async ...

  2. .net core 2.0 webuploader上传图片

    引入文件 <link href="~/Scripts/webuploader-0.1.5/webuploader.css" rel="stylesheet" ...

  3. HTML5-canvas-基础篇

    <canvas>新元素 <canvas> 元素用于图形的绘制,通过脚本 (通常是JavaScript)来完成. <canvas> 标签只是图形容器,您必须使用脚本来 ...

  4. [十]SpringBoot 之 普通类获取Spring容器中的bean

    我们知道如果我们要在一个类使用spring提供的bean对象,我们需要把这个类注入到spring容器中,交给spring容器进行管理,但是在实际当中,我们往往会碰到在一个普通的Java类中,想直接使用 ...

  5. POJ 2299 -Ultra-QuickSort-树状数组求逆序数

    POJ 2299Ultra-QuickSort 使用树状数组记录逆序对数. 把数组按照大小顺序插入,getsum(i)就是i前面的比他大的数. #include <cstdio> #inc ...

  6. Sum of Consecutive Prime Numbers POJ - 2739 线性欧拉筛(线性欧拉筛证明)

    题意:给一个数 可以写出多少种  连续素数的合 思路:直接线性筛 筛素数 暴力找就行   (素数到n/2就可以停下了,优化一个常数) 其中:线性筛的证明参考:https://blog.csdn.net ...

  7. Codeforces518 D. Ilya and Escalator

    传送门:>Here< 题意:有n个人排队做电梯,每个人必须等前面的人全部上了以后才能上.对于每秒钟,有p的概率选择上电梯,(1-p)的概率选择不上电梯.现在问t秒期望多少人上电梯 解题思路 ...

  8. win10系统同时安装python2.7和python3.6

    我是先在本机上安装的python3.6.5,因为要学习一个框架,但是这个框架只支持python2,所以我又安装了python2.7.15,并且配置到系统环境变量 环境变量配置了python3.6.5的 ...

  9. Ionic3实现选项卡切换可以重新加载echarts

    要求 选项卡每切换一次,就加载对应的一个echarts 图,要有一开始的动画效果效果如下: 注意点 1.echarts要想每次都能重新加载,需要移除"_echarts_instance_&q ...

  10. nginx+php使用open_basedir限制站点目录防止跨站

    以下三种设置方法均需要PHP版本为5.3或者以上.方法1)在Nginx配置文件中加入 fastcgi_param PHP_VALUE "open_basedir=$document_root ...