美文网首页
go 排序和查找

go 排序和查找

作者: StevenQin | 来源:发表于2019-03-30 13:40 被阅读0次

排序的介绍

  • 排序是将一组数据,依指定的顺序进行排列的过程。
    排序的分类:
    1、内部排序:

指将需要处理的所有数据都加载到内部存储器中进行排序。
包括(交换式排序法选择式排序法插入式排序法)

2、外部排序法:

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

交换式排序法

交换式排序属于内部排序法,是运用数据值比较后,依判断规则对数据位置进行交换,以达到排序的目的。

1、冒泡排序法(Bubble sort)



image.png

案例(冒泡排序法):

将5个无序:24,69,80,57,13,使用冒泡排序法将其排成一个从小到大的有序数列。

图例:


  • 写多重for循环,先从简单的内循环写起
package main

import (
    "fmt"
)

//冒泡排序
func minToMax(arr [5]int) [5]int {
    for i := len(arr) - 1; i >= 0; i-- {
        var tmp int = 0
        for j := 0; j < len(arr)-1; j++ {
            if arr[j] > arr[j+1] {
                tmp = arr[j+1]
                arr[j+1] = arr[j]
                arr[j] = tmp
            }
        } //内循环
    } //外循环
    return arr
}

func main() {
    //定义数组
    arr := [5]int{77, 69, 80, 57, 13}
    var a = minToMax(arr)
    fmt.Println(a)
}

2、快速排序法 (Quick sort)

顺序查找

  • 介绍
    1、顺序查找
    2、二分查找

案例:
1、有一个数列:白眉鹰王、金毛狮王、紫衫龙王、青翼蝠王
猜数游戏:从键盘中任意输入一个名称,判断数列中是否包含此名称(顺序查找

  • 代码实现:
    //定义名称数组
    names := [4]string{"白眉鹰王", "金毛狮王", "紫衫龙王", "青翼蝠王"}
    //定义输入的变量字符串
    heroname := ""
    //方式一
    fmt.Println("请输入人名")
    fmt.Scanln(&heroname)
    for i := 0; i < len(names); i++ {
        if heroname == names[i] { //找到了
            fmt.Printf("找到了%v,下标是%v\n", heroname, i)
            break
        } else if i == len(names)-1 {
            //没找到
            fmt.Printf("没有找到%v\n", heroname)
        }
    }

    //方式二
    index := -1 //如果找不到index就是-1;如果找到就是相应的下标
    for i := 0; i < len(names); i++ {
        if heroname == names[i] { //找到了
            index = i
            break
        }
    }
    if index == -1 {
        fmt.Printf("没有找到%v\n", heroname)
    } else {
        fmt.Printf("找到了%v,下标是%v\n", heroname, index)
    }

推荐使用index方式

二分查找

2、请对一个有序数组进行二分查找{ 1,8,10,89,1000,1234 },输入一个数看看该数组是否存在此数,并且求出下标,如果没有就提示“没有这个数” (使用递归)

  • 代码实现
package main

import (
    "fmt"
)

//定义递归函数  数组引入用指针会加快速度
func BinaryFind(arr *[6]int, leftIndex int, rightIndex int, findVal int) {
    //退出递归的临界条件是
    if leftIndex > rightIndex {
        fmt.Println("找不到")
        return
    }
    //找出中间的下标
    middle := (leftIndex + rightIndex) / 2
    if (*arr)[middle] > findVal {
        //如果中间下标的值大于传入的值 ,则应该在left 查找。下标范围是 leftIndex到 middle -1
        BinaryFind(arr, leftIndex, middle-1, findVal)
    } else if (*arr)[middle] < findVal {
        //如果中间下标的值小于传入的值,则应该在right 查找。下标范围是 middle +1 到 rightIndex
        BinaryFind(arr, middle+1, rightIndex, findVal)
    } else {
        //如果下标对应的值相等
        fmt.Printf("找到了,下标是%v\n", middle)
    }
}

func main() {
    //从小到大的有序数组
    arr := [6]int{1, 8, 10, 89, 1000, 1234}
    BinaryFind(&arr, 0, len(arr)-1, 8)
}

相关文章

  • go 排序和查找

    排序的介绍 排序是将一组数据,依指定的顺序进行排列的过程。排序的分类:1、内部排序: 指将需要处理的所有数据都加载...

  • go排序之路(编程基础)

    对python排序有兴趣的可以去我之前的博客查找TopGun Python排序 冒泡排序 pupu.go(思路 每...

  • 面试知识点

    排序冒泡排序快速排序选择排序插入排序二路归并 查找二分查找 排序和查找的java实现 java语言Java字符串字...

  • 剑指Offer.C++.code6-10

    (1)排序和查找是面试考察算法的重点,如二分查找、归并排序、快速排序等;(2)查找:顺序查找、二分查找、哈希表查找...

  • 18-04-27  python3 算法笔记 003查找与排序

    查找: 顺序查找 二分查找 hash查找 排序: 冒泡排序 选择排序 插入排序希尔排序 归并排序 快速...

  • go 数组排序查找练习

    题目1 随机生成10个整数(1-100的范围)保存到数组,并倒序打印及求平均值、最大值、和最大值的下标、并查找里面...

  • Java实现常见的算法

    主要罗列了常见的选择排序,冒泡排序和快速排序,还有二分查找的算法。 选择排序 冒泡排序 快速排序 二分查找 注意二...

  • 数据结构 第9节 快速排序

    一、排序和查找的关系 排序是查找的前提排序时重点 二、快速排序讲解    假设我们现在对“6 1 2 7 ...

  • 排序和查找

    交换函数 1. 冒泡排序 2. 选择排序 3. 快速排序 4.插入排序 5. 归并排序 6. 二分查找 7. 求递...

  • 排序和查找

    排序算法 排序的稳定性image.png 影响排序算法的几个因素 时间性能 辅助空间 算法复杂性 冒泡排序 时间复...

网友评论

      本文标题:go 排序和查找

      本文链接:https://www.haomeiwen.com/subject/qgbjbqtx.html