欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

冒泡排序

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

時間復(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)對比的輪數(shù)
		exchange := false
		for j := 1; j < lenth-i; j++ {//當(dāng)前輪相鄰元素循環(huán)對比
			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
}

快速排序

思路:以一個基準(zhǔn)數(shù)將數(shù)組拆分為兩組,一邊大于這個數(shù),一邊小于這個數(shù),再最左右兩個組重復(fù)這個過程,直到各個區(qū)域只有一個數(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ù)組中的最小元素,然后將這個最小元素和數(shù)組的第一個元素交換位置,如果第一個元素就是最小元素,就和自己交換位置;再次,在剩下的元素中找到最小元素和數(shù)組中的第二個元素交換位置,如此往復(fù),直到將整個數(shù)組排序,一句話總結(jié)就是,不斷在剩余元素中找最小元素。

時間復(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到最后一個元素區(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)前索引左邊的所有元素都是有序的,但是他們的最終位置還不確定,為了給更小的元素騰出空間,他們可能會被移動,但是當(dāng)索引到達數(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
}

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

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

相關(guān)文章

  • go?logger不侵入業(yè)務(wù)代碼使用slog替換zap并實現(xiàn)callerSkip詳解

    go?logger不侵入業(yè)務(wù)代碼使用slog替換zap并實現(xiàn)callerSkip詳解

    這篇文章主要為大家介紹了go?logger不侵入業(yè)務(wù)代碼使用slog替換zap并實現(xiàn)callerSkip詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-09-09
  • 使用go實現(xiàn)常見的數(shù)據(jù)結(jié)構(gòu)

    使用go實現(xiàn)常見的數(shù)據(jù)結(jié)構(gòu)

    這篇文章主要介紹了使用go實現(xiàn)常見的數(shù)據(jù)結(jié)構(gòu),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03
  • Golang指針的操作以及常用的指針函數(shù)

    Golang指針的操作以及常用的指針函數(shù)

    本文主要介紹了Golang指針的操作以及常用的指針函數(shù),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • go語言實現(xiàn)銀行卡號Luhn校驗

    go語言實現(xiàn)銀行卡號Luhn校驗

    這篇文章主要為大家介紹了go語言Luhn校驗測試銀行卡號碼的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-05-05
  • go中的unsafe包及使用詳解

    go中的unsafe包及使用詳解

    Unsafe code是一種繞過go類型安全和內(nèi)存安全檢查的Go代碼。這篇文章主要介紹了go中的unsafe包,需要的朋友可以參考下
    2019-07-07
  • golang 如何獲取文件夾下面的文件列表

    golang 如何獲取文件夾下面的文件列表

    這篇文章主要介紹了golang 獲取文件夾下面的文件列表方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-05-05
  • Golang實現(xiàn)請求限流的幾種辦法(小結(jié))

    Golang實現(xiàn)請求限流的幾種辦法(小結(jié))

    這篇文章主要介紹了Golang實現(xiàn)請求限流的幾種辦法(小結(jié)),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • 談?wù)揋o 什么時候會觸發(fā) GC問題

    談?wù)揋o 什么時候會觸發(fā) GC問題

    Go 語言作為一門新語言,在早期經(jīng)常遭到唾棄的就是在垃圾回收(下稱:GC)機制中 STW(Stop-The-World)的時間過長。下面文章就對此話題展開,感興趣的小伙伴可以參考下面文章的內(nèi)容
    2021-09-09
  • 關(guān)于升級go1.18的goland問題詳解

    關(guān)于升級go1.18的goland問題詳解

    作為一個go語言程序員,覺得自己有義務(wù)為go新手開一條更簡單便捷的上手之路,下面這篇文章主要給大家介紹了關(guān)于升級go1.18的goland問題的相關(guān)資料,需要的朋友可以參考下
    2022-11-11
  • Go語言計算兩個經(jīng)度和緯度之間距離的方法

    Go語言計算兩個經(jīng)度和緯度之間距離的方法

    這篇文章主要介紹了Go語言計算兩個經(jīng)度和緯度之間距離的方法,涉及Go語言相關(guān)數(shù)學(xué)函數(shù)的使用技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-02-02

最新評論