Golang的排序和查找

摘要:
否则将追究法律责任。一.排序的基本介绍排序是将一组数据,依指定的顺序进行排列的过程。2˃.代码实现1packagemain23import67funcBubbleSort{8fmt.Println9temp:=01011fori:=0;i˂len-1;i++{12forj:=0;j[j+1]{14temp=[j]15[j]=[j+1]16[j+1]=temp17}18}19}20fmt.Println21}222324funcmain(){25arr:=[8]int{14,51,32,98,24,118,35,26}26BubbleSort27fmt.Println28}bubbling.go三.查找1˃.查找介绍在Golang中,我们常用的查找有两种:顺序查找和二分查找。2˃.顺序查找案例packagemainimportfuncmain(){Names:=[5]string{"孙悟空","唐三藏","猪八戒","沙和尚","白龙马"}varsearchName=""fmt.Printlnfmt.Scanln//顺序查找:第一种方式forindex:=0;index˂len;index++{ifsearchName==Names[index]{fmt.Printfbreak}elseifindex=={fmt.Printf}}//顺序查找:第二种方式(推荐)index2:=-1fori:=0;i.二分查找案例请对一个有序数组进行二分查找{1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192},输入一个数看看该数组是否存在此数,并且求出下标,如果没有就提示"找不到"。

Golang的排序和查找

作者:尹正杰

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

一.排序的基本介绍

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

1>.内部排序

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

2>.外部排序法

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

二.冒泡排序

1>.冒泡排序基本思想

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

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

2>.代码实现

Golang的排序和查找第1张Golang的排序和查找第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 
24 func main(){
25     arr := [8]int{14,51,32,98,24,118,35,26}
26     BubbleSort(&arr)
27     fmt.Println("main arr=",arr)
28 }
bubbling.go

Golang的排序和查找第3张

三.查找

1>.查找介绍

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

2>.顺序查找案例

Golang的排序和查找第1张Golang的排序和查找第5张
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 
",searchName,index)
            break
        }else if index == (len(Names)-1){
            fmt.Printf("没有找到%v 
",searchName)
        }
    }
    //顺序查找:第二种方式(推荐)
    index2 := -1
    for i := 0;i<len(Names);i++{
        if searchName ==Names[i]{
            index2 =i
            break
        }
    }
    if index2 != -1{
        fmt.Printf("找到%v,下标%v 
",searchName,index2)
    }else{
        fmt.Printf("没有找到%v 
",searchName)
    }
}
sequential.go

Golang的排序和查找第6张

3>.二分查找案例

请对一个有序数组进行二分查找{1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192} ,输入一个数看看该数组是否存 在此数,并且求出下标,如果没有就提示"找不到"。
Golang的排序和查找第1张Golang的排序和查找第8张
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 
", 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的排序和查找第9张

免责声明:文章转载自《Golang的排序和查找》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇myeclipse 8.5最新注册码(过期时间到2016年)Django 多对多中间表详解下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

golang channel 用法总结

goroutine 使用golang的channel之前,我们需要先了解go的goroutine。Go 语言支持并发,我们只需要通过 go 关键字来开启 goroutine 即可。goroutine 是轻量级线程,相比线程开销更小,完全由 Go 语言负责调度,是 Go 支持并发的核心。如下所示,在go中我们可以很方便的开启并发执行。 package mai...

三种拷贝数组的方式

一和二利用的是java函数库里面的函数来进行数组的拷贝 第二种虽然是利用函数库但是也需要自己建立以一个新的函数 第三种是建立一个新的数组挨个赋值 package day10_01_Review; import java.util.Arrays; /* * 数组的扩容 * 三种方式 */ public class ArraysDilatation {...

Golang协程与通道整理

协程goroutine 不由OS调度,而是用户层自行释放CPU,从而在执行体之间切换。Go在底层进行协助实现 涉及系统调用的地方由Go标准库协助释放CPU 总之,不通过OS进行切换,自行切换,系统运行开支大大降低 通道channel 并发编程的关键在于执行体之间的通信,go通过通过channel进行通信 channel可以认为类似其他OS体系中的消息队列,...

golang socket编程,实现http协议

https://studygolang.com/articles/11796 package main import ( "log" "net" ) func handleConnection(conn net.Conn) error { defer conn.Close() var request = make([...

Mac Golang 开发环境配置

Mac Golang 开发环境配置 Golang 介绍 Go(又称Golang)是Google开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言。由罗伯特·格瑞史莫,罗勃·派克(Rob Pike)及肯·汤普逊于2007年9月开始设计Go,稍后Ian Lance Taylor、Russ Cox加入项目。Go是基于Inferno操作系统所开发的...

golang网关之手动实现反向代理

简单说说反向代理    信号监听方式启动两个web服务,分别是9091 9092 分别返回 web1 web2 webmain.go type web1handler struct {} func(web1handler) ServeHTTP(writer http.ResponseWriter, request *http.Request) {...