首頁 > 軟體

Go語言實現常用排序演演算法的範例程式碼

2022-08-11 14:00:04

排序演演算法是在生活中隨處可見,也是演演算法基礎,因為其實現程式碼較短,應用較常見。所以在面試中經常會問到排序演演算法及其相關的問題,可以說是每個程式設計師都必須得掌握的了。為了方便大家學習,花了一天的時間用Go語言實現一下常用的演演算法且整理了一下,如有需要可以參考。

氣泡排序

思路:從前往後對相鄰的兩個元素依次進行比較,讓較大的數往下沉,較小的網上冒,即每當兩個相鄰的元素比較後發現他們的排序要求相反時,就將它們互換。

時間複雜度:O(N^2)

空間複雜度: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++ {//迴圈對比的輪數
		exchange := false
		for j := 1; j < lenth-i; j++ {//當前輪相鄰元素迴圈對比
			if list[j-1] > list[j]{//如果前邊的大於後邊的
				list[j-1], list[j] = list[j], list[j-1]//交換資料
				exchange = true
			}
		}
		if !exchange {
			break
		}
	}
	return list
}

快速排序

思路:以一個基準數將陣列拆分為兩組,一邊大於這個數,一邊小於這個數,再最左右兩個組重複這個過程,直到各個區域只有一個數。

時間複雜度:O(nlogn)

空間複雜度:O(1)

func quickSort(list []int) []int {
	length := len(list)
	if length <= 1 {
		return list
	}
	//基準值
	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...)
}

選擇排序

思路:首先找到陣列中的最小元素,然後將這個最小元素和陣列的第一個元素交換位置,如果第一個元素就是最小元素,就和自己交換位置;再次,在剩下的元素中找到最小元素和陣列中的第二個元素交換位置,如此往復,直到將整個陣列排序,一句話總結就是,不斷在剩餘元素中找最小元素。

時間複雜度:O(n^2)

空間複雜度:O(1)

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

	for i := 0; i < length; i++ {
		minIndex := i
		//每次迴圈找出i+1到最後一個元素區間的最小值,然後當前元素和當前最小值比較
		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
}

插入排序

思路:與選擇排序一樣,當前索引左邊的所有元素都是有序的,但是他們的最終位置還不確定,為了給更小的元素騰出空間,他們可能會被移動,但是當索引到達陣列的末端,陣列排序就完成了。

時間複雜度:O(N^2)

空間複雜度: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
}

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

到此這篇關於Go語言實現常用排序演演算法的範例程式碼的文章就介紹到這了,更多相關Go語言排序演演算法內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com