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基礎-排序、二分查詢、map、map排序反轉
排序 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_bound、upperbound講解、二分查詢、最長上升子序列(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簡介、查詢簡述【_source、match、must、should等】、過濾器、聚合
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)。 所有小於"基準"的元素,都移到"基準"的左邊;所有大於"基準"的元素,都移到"基準"的右邊。 對"基準"左邊和右邊的兩個子集,不斷重複