1. 程式人生 > >golang基礎-排序、二分查詢、map、map排序反轉

golang基礎-排序、二分查詢、map、map排序反轉

排序

package main

import(
    "fmt"
    "sort"
)

func main() {
    testInSort()
    testString()
    testFloat()
}

func testFloat(){
    var a = [...]float64{12.5,455.677,236.77,-234.66,0,5.99}
    sort.Float64s(a[:])
    fmt.Println(a)
}

func testString(){
    var a = [...]string{"wefD","wefghn"
,"thGw","wGGef","sfsf"} sort.Strings(a[:]) fmt.Println(a) } /*陣列是值型別,如果要改變值,需要傳切片進去,去改變*/ func testInSort(){ var a = [...]int{1,3,5,-5,0,-4} //需要傳遞切片進去才能排序 sort.Ints(a[:]) fmt.Println(a) }

輸出如下:

PS E:\golang\go_pro\src\safly> go run demo.go
[-5 -4 0 1 3 5]
[sfsf thGw wGGef wefD wefghn]
[-234.66 0 5.99 12.5 236.77 455.677] PS E:\golang\go_pro\src\safly>

二分查詢

ort.SearchInts(a []int, b int) 從陣列a中查詢b,前提是a必須有序
sort.SearchFloats(a []float64, b float64) 從陣列a中查詢b,前提是a必須有序
sort.SearchStrings(a []string, b string) 從陣列a中查詢b,前提是a必須有序

package main

import(
    "fmt"
    "sort"
)

func main() {
    testSearchIn()

}
//從陣列a中查詢b,前提是a必須有序
func testSearchIn(){ var a = [...] int {1,8,38,2,348,484,-6} //沒有排序直接進行查詢 index:= sort.SearchInts(a[:],2) //輸出1是錯誤的,因為沒有排序 fmt.Println(index) //進行排序操作 sort.Ints(a[:]) fmt.Println(a) //傳切片過去 index= sort.SearchInts(a[:],2) fmt.Println(index) }

輸出如下:

PS E:\golang\go_pro\src\safly> go run demo.go
1
[-6 1 2 8 38 348 484]
2
PS E:\golang\go_pro\src\safly>

map

map建立方式
package main

import(
    "fmt"
)


func main() {
    testMap()
    testMoreMap()
}

//map巢狀
func testMoreMap(){

    a:= make(map[string]map[string]string,100)
    //value是map,使用時候需要為其開闢空間
    a["k1"] = make(map[string]string)
    a["k1"]["k1k1"]= "aaa"
    fmt.Println(a)
}

//建立map的2種方式
func testMap(){
     a  := make(map[string]string,10)
    a["abc"] = "abc"
    fmt.Println(a)

    var b map[string] string = map[string]string{
        "bcd":"bcd",
    }
    fmt.Println(b)
}

輸出如下:

PS E:\golang\go_pro\src\safly> go run demo.go
map[abc:abc]
map[bcd:bcd]
map[k1:map[k1k1:aaa]]
PS E:\golang\go_pro\src\safly>
map迴圈遍歷
package main

import(
    "fmt"
)


func main() {
    testMap3()
    fmt.Println("---------------")
    testMap4()
    testMap5()
}
/*切片裡面是map*/
func testMap5() {
    var a []map[int]int
    a = make([]map[int]int, 5)

    if a[0] == nil {
        a[0] = make(map[int]int)
    }
    a[0][10] = 10
    fmt.Println(a)
}
/*迴圈遍歷*/
func testMap4(){
    a:= make(map[string]map[string]string,100)
    a["k1"] = make(map[string]string)
    a["k1"]["k2"] = "abc"
    a["k1"]["k3"] = "bcd"

    a["k2"] = make(map[string]string)
    a["k2"]["k4"] = "efg"
    a["k2"]["k5"] = "hij"

    for k,v := range a{
        fmt.Println(k)
        for k1,v1:= range v{
            fmt.Println(k1,v1)
        }
    }

    //刪除
    fmt.Println("-------刪除前後-------")
    delete(a,"k1")
    for k,v := range a{
        fmt.Println(k)
        for k1,v1:= range v{
            fmt.Println(k1,v1)
        }
    }
 }


func testMap3(){
    a := make(map[string]map[string]string,10)
    modify(a)
    fmt.Println(a)
}

func modify(a map[string]map[string]string){
    _,ok:=a["zhangsan"]
    //輸出false
    fmt.Println(ok)
    if !ok {
        a["zhangsan"] = make(map[string]string)
    }
    a["zhangsan"]["pass"] = "123"
    return
}

輸出如下:

PS E:\golang\go_pro\src\safly> go run demo.go
false
map[zhangsan:map[pass:123]]
---------------
k1
k2 abc
k3 bcd
k2
k4 efg
k5 hij
-------刪除前後-------
k2
k4 efg
k5 hij
[map[10:10] map[] map[] map[] map[]]
PS E:\golang\go_pro\src\safly>

排序、反轉

package main

import(
    "fmt"
    "sort"
)


func testMapReverse(){
    var a map[int]string 
    var b map[string] int
    a = make(map[int]string,5)
    b = make(map[string] int ,5)

    a[1] = "a"
    a[2] = "b"

    for k,v := range a{
        b[v] = k
    }
    for k,v := range b{
        fmt.Println(k,v)
    }

}
func main() {

    testMapSort()
    fmt.Println("--------")
    testMapReverse()
}

func testMapSort(){
    var a map[int]int 
    a = make(map[int]int ,8)
    a[1] = 10
    a[2] = 11
    a[3] = 12
    a[4] = 13
    //定義一個切片
    var b []int
    //說明map是無序的
    for k,v := range a{
        fmt.Println(k,v)
        b = append(b,v)
    }

    sort.Ints(b)
    fmt.Println("----------對map的值進行排序(放到切片裡面)-----------")
    for k,v:= range b{
        fmt.Println(k,v)
    }
}

輸出如下:

PS E:\golang\go_pro\src\safly> go run demo.go
1 10
2 11
3 12
4 13
----------對map的值進行排序(放到切片裡面)-----------
0 10
1 11
2 12
3 13
--------
b 2
a 1
PS E:\golang\go_pro\src\safly>

相關推薦

golang基礎-排序二分查詢mapmap排序反轉

排序 package main import( "fmt" "sort" ) func main() { testInSort() testString() testFloat() } func test

氣泡排序選擇排序二分查詢插入排序

氣泡排序、選擇排序、二分查詢、插入排序 氣泡排序   氣泡排序的思想就是兩兩比較,按從小到大輸出的話,兩個值相比,較小的放前大的放後,那麼第一次兩兩比較結束後,最大值放在末尾,接下來再繼續兩兩比較,但是這一次不需要比較到最後,因為最後已經是最大值了,所以每次兩兩比較結束後,都會少比一次,

Java中陣列氣泡排序選擇排序二分查詢的詳細分析

前言:儘管在實際開發中,我們通過Arrays工具類就可以便利地對陣列進行排序和查詢的操作,但是掌握氣泡排序、選擇排序、二分法查詢的思想對於程式設計來說還是極其重要的,在很多場景都會用到。希望通過這篇部落格的分析能給大家帶來收穫。 主題:陣列的排序和查詢 1、冒泡法排序:

java-氣泡排序選擇排序二分查詢

1、氣泡排序 1 public void bubbleSort(int[] arr) { 2   for (int i = 0; i < arr.length - 1; i++) { //外迴圈只需要比較arr.length-1次就可以了 3     for

PHP 陣列排序(氣泡排序選擇排序);陣列查詢(順序查詢二分查詢)

<?php header('Content-Type:text/html;charset=utf8'); //二分查詢 //有2個前提:1.陣列已經排好序;2.是連續的索引陣列,即下標為0,1,2,3,4,5... class Search{ /** * * @param arr:已經排好序

java實現順序查詢二分查詢雜湊表查詢二叉排序查詢

順序查詢、二分查詢、雜湊表查詢、二叉排序樹查詢這幾種查詢演算法是面試中常被問到的幾種演算法。 1. 順序查詢     對於陣列,按順序比較給定的值,時間複雜度0(n),,以下是實現: public static int Linear_Search(int[] data, i

二分查詢(Binary Search)

一、概述 二分查詢(Binary Search,也稱折半查詢)——針對有序資料集合的查詢演算法 1、基本思想 類似分治思想,每次都通過跟區間的中間元素進行對比,將代查詢的區間縮小為之前的一半,直到找到要查詢的元素,或者區間被縮小為0(不存在該元素)。 2、時

查詢演算法二分查詢

二分查詢又稱折半查詢,優點是比較次數少,查詢速度快,平均效能好;其缺點是要求待查表為有序表,且插入刪除困難。 因此,折半查詢方法適用於不經常變動而查詢頻繁的有序列表。 首先,假設表中元素是按升序排列,將表中間位置記錄的關鍵字與查詢關鍵字比較,如果兩者相等,則查詢成功;否則利用中間位置記錄將表分成前、後兩個子

51 Nod 1087 1 10 100 1000 (遞迴二分查詢

基準時間限制:1 秒 空間限制:131072 KB 分值: 5 難度:1級演算法題  收藏  關注 1,10,100,1000...組成序列1101001000...,求這個序列的第N位是

圖靈班第二次課---陣列指標二分查詢

1.scanf("%i",&n) 從鍵盤輸入的值都是字元,%i的作用是將字元轉換為整型,並存在與記憶體中。 2.記憶體 記憶體以位元組為單位,連續排列。整型佔4個位元組。 在定義陣列的時候,如int a[5];記憶體會給5*sizeof(int)個空間,

深入理解二分查詢(二二分答案)

二分答案     如果已知候選答案的範圍[min,max],有時候我們不必通過計算得到答案,只需在此範圍內應用“二分”的過程,逐漸靠近答案(最後,得到答案)! 一、何時可以使用“二分答案”     不是任何題目都適合使用“二分答案”的,我Sam觀察到一般有以下的一

js實現常見的幾種演算法(陣列去重字元統計二分查詢等)

1、陣列去重:利用物件屬性進行篩選 function filter(arr){ let obj={}; let newArr=[]; for (let i=0;i<arr.

二分查詢與二叉查詢樹(小象)

二分查詢演算法(遞迴,迴圈) 具有分治思想的多用迴圈,具有回溯思想的多用遞迴。 二分或者二叉排序樹都是在 分治的解決問題 二分查詢:     二分查詢:待查數是跟中間的數對比,只有查詢的數恰好等於中間的數返回正確; 遞迴 若比中間的數大,則去搜索右區

遞迴二分查詢(主要是程式例子)

1.遞迴1.1 求n!1.2 求冪次方1.3 fibonacci數列2.二分查詢返回查詢數在列表中的index2.1原例2.2修改例根據查詢運算時間和函式呼叫次數對比這兩個例子。search([2,4,5,7,8,9],2,0,5)改/原search([2,4,5,7,8,9

leetcode 35. Search Insert Position 搜尋插入位置 python 簡單而高效的方法二分查詢

class Solution: def searchInsert(self, nums, target): """ :type nums: List[int]

【部分轉載】:【lower_boundupperbound講解二分查詢最長上升子序列(LIS)最長下降子序列模版】

二分 lower_bound lower_bound()在一個區間內進行二分查詢,返回第一個大於等於目標值的位置(地址) upper_bound upper_bound()與lower_bound()的主要區別在於前者返回第一個大於目標值的位置 int lowerBound(int x){ i

GoLang基礎數據類型--->字典(map)詳解

golang ont nbsp spa 數據 否則 創作 聲明 作者                          GoLang基礎數據類型--->字典(map)詳解                                                 

009-elasticsearch【三】示例數據導入URI查詢方式簡介Query DSL簡介查詢簡述【_sourcematchmustshould等】過濾器聚合

ase emp -h 集合 shard ken 結果 employ 5.1 一、簡單數據 客戶銀行賬戶信息,json { "account_number": 0, "balance": 16623, "firstname": "Brad

javascript常用陣列排序二分查詢

1. 氣泡排序 基本思路:依次比較相鄰的兩個數的大小,若大數在前、小數在後,則交換兩個數的位置,依次比較直至全部資料從小到大排好序 function sort_bubble(arr) { var len = arr.length; for (var i = 0;

js實現快速排序二分查詢 (詳解,一次學會)

js中幾大演算法,最近看到網上各路大神的解答,都蠻好的,自己也來玩一玩 一,快速排序 大致分三步: 在資料集之中,選擇一個元素作為"基準"(pivot)。 所有小於"基準"的元素,都移到"基準"的左邊;所有大於"基準"的元素,都移到"基準"的右邊。 對"基準"左邊和右邊的兩個子集,不斷重複