最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Go語(yǔ)言實(shí)現(xiàn)常用排序算法的示例代碼

 更新時(shí)間:2022年08月11日 11:02:18   作者:yi個(gè)俗人  
排序算法是在生活中隨處可見(jiàn),也是算法基礎(chǔ),因?yàn)槠鋵?shí)現(xiàn)代碼較短,應(yīng)用較常見(jiàn)。所以在面試中經(jīng)常會(huì)問(wèn)到排序算法及其相關(guān)的問(wèn)題。本文為大家整理了一些Go語(yǔ)言中常用排序算法的實(shí)現(xiàn),需要的可以參考一下

排序算法是在生活中隨處可見(jiàn),也是算法基礎(chǔ),因?yàn)槠鋵?shí)現(xiàn)代碼較短,應(yīng)用較常見(jiàn)。所以在面試中經(jīng)常會(huì)問(wèn)到排序算法及其相關(guān)的問(wèn)題,可以說(shuō)是每個(gè)程序員都必須得掌握的了。為了方便大家學(xué)習(xí),花了一天的時(shí)間用Go語(yǔ)言實(shí)現(xiàn)一下常用的算法且整理了一下,如有需要可以參考。

冒泡排序

思路:從前往后對(duì)相鄰的兩個(gè)元素依次進(jìn)行比較,讓較大的數(shù)往下沉,較小的網(wǎng)上冒,即每當(dāng)兩個(gè)相鄰的元素比較后發(fā)現(xiàn)他們的排序要求相反時(shí),就將它們互換。

時(shí)間復(fù)雜度:O(N^2)

空間復(fù)雜度:O(1)

func main() {
	fmt.Println(bubbleSort([]int{2, 4, 1, 6, 3}))
}

func bubbleSort(list []int) []int {
	lenth := len(list)
	for i := 0; i <= lenth; i++ {//循環(huán)對(duì)比的輪數(shù)
		exchange := false
		for j := 1; j < lenth-i; j++ {//當(dāng)前輪相鄰元素循環(huán)對(duì)比
			if list[j-1] > list[j]{//如果前邊的大于后邊的
				list[j-1], list[j] = list[j], list[j-1]//交換數(shù)據(jù)
				exchange = true
			}
		}
		if !exchange {
			break
		}
	}
	return list
}

快速排序

思路:以一個(gè)基準(zhǔn)數(shù)將數(shù)組拆分為兩組,一邊大于這個(gè)數(shù),一邊小于這個(gè)數(shù),再最左右兩個(gè)組重復(fù)這個(gè)過(guò)程,直到各個(gè)區(qū)域只有一個(gè)數(shù)。

時(shí)間復(fù)雜度:O(nlogn)

空間復(fù)雜度:O(1)

func quickSort(list []int) []int {
	length := len(list)
	if length <= 1 {
		return list
	}
	//基準(zhǔn)值
	base := list[0]
    left := make([]int, 0)
	right := make([]int, 0)
	for i := 1; i < length; i++ {
		if list[i]  > base {
			right  = append(right, list[i])
		} else {
			left = append(left, list[i])
		}
	}
	left, right  = quickSort(left), quickSort(right)
	return append(append(left, base),right...)
}

選擇排序

思路:首先找到數(shù)組中的最小元素,然后將這個(gè)最小元素和數(shù)組的第一個(gè)元素交換位置,如果第一個(gè)元素就是最小元素,就和自己交換位置;再次,在剩下的元素中找到最小元素和數(shù)組中的第二個(gè)元素交換位置,如此往復(fù),直到將整個(gè)數(shù)組排序,一句話總結(jié)就是,不斷在剩余元素中找最小元素。

時(shí)間復(fù)雜度:O(n^2)

空間復(fù)雜度:O(1)

func selectSort(list []int) []int {
	length := len(list)

	for i := 0; i < length; i++ {
		minIndex := i
		//每次循環(huán)找出i+1到最后一個(gè)元素區(qū)間的最小值,然后當(dāng)前元素和當(dāng)前最小值比較
		for j := i + 1; j < length; j++ {
			if list[j] < list[minIndex] {
				minIndex = j
			}
		}
		if i != minIndex {
			list[i], list[minIndex] = list[minIndex], list[i]
		}
	}
	return list
}

插入排序

思路:與選擇排序一樣,當(dāng)前索引左邊的所有元素都是有序的,但是他們的最終位置還不確定,為了給更小的元素騰出空間,他們可能會(huì)被移動(dòng),但是當(dāng)索引到達(dá)數(shù)組的末端,數(shù)組排序就完成了。

時(shí)間復(fù)雜度:O(N^2)

空間復(fù)雜度:O(1)

func insertSort(list []int) []int {
	length := len(list)
	for i := 0; i < length; i++ {
		for j := i; j > 0; j-- {
			if list[j] > list[j-1] {
				break
			}
			list[j], list[j-1] = list[j-1], list[j]
		}
	}
	return list
}

排序思路算法幾乎一樣。 暫時(shí)就介紹這幾種常用的也是面試中經(jīng)常問(wèn)道的排序算法。

到此這篇關(guān)于Go語(yǔ)言實(shí)現(xiàn)常用排序算法的示例代碼的文章就介紹到這了,更多相關(guān)Go語(yǔ)言排序算法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Go實(shí)現(xiàn)簡(jiǎn)單的數(shù)據(jù)庫(kù)表轉(zhuǎn)結(jié)構(gòu)體詳解

    Go實(shí)現(xiàn)簡(jiǎn)單的數(shù)據(jù)庫(kù)表轉(zhuǎn)結(jié)構(gòu)體詳解

    這篇文章主要為大家介紹了Go實(shí)現(xiàn)簡(jiǎn)單的數(shù)據(jù)庫(kù)表轉(zhuǎn)結(jié)構(gòu)體詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • golang如何通過(guò)type定義函數(shù)類型

    golang如何通過(guò)type定義函數(shù)類型

    這篇文章主要介紹了golang如何通過(guò)type定義函數(shù)類型問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • Golang中interface的基本用法詳解

    Golang中interface的基本用法詳解

    Go 中接口也是一個(gè)使用得非常頻繁的特性,好的軟件設(shè)計(jì)往往離不開(kāi)接口的使用,比如依賴倒置原則(通過(guò)抽象出接口,分離了具體實(shí)現(xiàn)與實(shí)際使用的耦合)。 今天,就讓我們來(lái)了解一下 Go 中接口的一些基本用法
    2023-01-01
  • 深入了解Golang中占位符的使用

    深入了解Golang中占位符的使用

    在寫?golang?的時(shí)候,也是有對(duì)應(yīng)的格式控制符,也叫做占位符,寫這個(gè)占位符,需要有對(duì)應(yīng)的數(shù)據(jù)與之對(duì)應(yīng),不能瞎搞。本文就來(lái)和大家聊聊Golang中占位符的使用,希望對(duì)大家有所幫助
    2023-03-03
  • Go語(yǔ)言使用goroutine及通道實(shí)現(xiàn)并發(fā)詳解

    Go語(yǔ)言使用goroutine及通道實(shí)現(xiàn)并發(fā)詳解

    這篇文章主要為大家介紹了Go語(yǔ)言使用goroutine及通道實(shí)現(xiàn)并發(fā)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • golang切片初始化的使用示例

    golang切片初始化的使用示例

    Go語(yǔ)言中,切片可通過(guò)直接初始化、數(shù)組初始化、切片表達(dá)式等多種方法進(jìn)行初始化,這些方式提供了靈活的數(shù)據(jù)管理方式,適合不同的編程需求和場(chǎng)景,感興趣的可以了解一下
    2024-10-10
  • go語(yǔ)言題解LeetCode506相對(duì)名次示例詳解

    go語(yǔ)言題解LeetCode506相對(duì)名次示例詳解

    這篇文章主要為大家介紹了go語(yǔ)言題解LeetCode506相對(duì)名次示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • Go語(yǔ)言實(shí)現(xiàn)lru淘汰策略和超時(shí)過(guò)期

    Go語(yǔ)言實(shí)現(xiàn)lru淘汰策略和超時(shí)過(guò)期

    緩存的大小是有限的,當(dāng)添加數(shù)據(jù)發(fā)現(xiàn)剩余緩存不夠時(shí),需要淘汰緩存中的部分?jǐn)?shù)據(jù),本文主要介紹了Go語(yǔ)言實(shí)現(xiàn)lru淘汰策略和超時(shí)過(guò)期,感興趣的可以了解一下
    2024-02-02
  • GoFrame?gtree樹(shù)形結(jié)構(gòu)的使用技巧示例

    GoFrame?gtree樹(shù)形結(jié)構(gòu)的使用技巧示例

    這篇文章主要為大家介紹了GoFrame?gtree樹(shù)形結(jié)構(gòu)的使用技巧示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • Go語(yǔ)言題解LeetCode1051高度檢查器示例詳解

    Go語(yǔ)言題解LeetCode1051高度檢查器示例詳解

    這篇文章主要為大家介紹了Go語(yǔ)言題解LeetCode1051高度檢查器示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12

最新評(píng)論

鹤庆县| 安阳市| 务川| 安西县| 邯郸市| 宜州市| 巧家县| 岫岩| 西平县| 呼图壁县| 利川市| 重庆市| 大同县| 响水县| 吴江市| 洪泽县| 浙江省| 古交市| 棋牌| 屯门区| 河曲县| 奉节县| 云浮市| 馆陶县| 达拉特旗| 贵定县| 大田县| 府谷县| 广元市| 麻江县| 河源市| 滁州市| 武汉市| 岳阳市| 五指山市| 额济纳旗| 云浮市| 溧水县| 临汾市| 万源市| 兴国县|