1. 程式人生 > >簡單算法系列:快速算法/冒泡算法兩則

簡單算法系列:快速算法/冒泡算法兩則

mil 小例子 turn int 設計 pan 問題 體會 理解

工作較忙,沒辦法抽出時間專心攻克《Go語言編程》,隨著了解的更多,越發體會出這本書中小例子的精巧。

掌握這些小例子,就可以完成Go基礎的全面掌握

最近抽出時間專心敲這些例子。但是發現一些問題,在設計上,許大大的算法可能更難讓我理解一點。特對關於二章中結尾例子中算法,寫出自己的算法,較之,我自己寫的,更方便自己理解。

/*
快速排序算法
*/
func quicSort(values []int){
if len(values) <= 1{
return
}

mid, i := values[0], 1 //首值做關鍵值,且抽出數組中的第二個鍵值,方便比對
head, tail := 0, len(values) - 1 //抽出第一個鍵值,還有數組的數量

for head < tail {

if mid < values[i] {
values[i], values[tail] = values[tail], values[i] //比它大的,就往後扔
tail-- //往後扔一個,就少扔一次
}else{
values[head], values[i] = values[i], values[head]//比它小的,就往前扔
head++//往前扔一個,也少扔一次
i++//比對的鍵值,進行+1
}
}

values[head] = mid//此時關鍵值,應當就在head這個鍵值上

quicSort(values[:head])//遞歸
quicSort(values[head + 1:])//遞歸
}

/*
冒泡算法
*/

func bubbleSort(values []int){
for i := 0; i < len(values); i++ {

for z := i + 1; z < len(values); z++ {
if values[i] > values[z]{
values[i], values[z] = values[z], values[i]
}
}
}
}

冒泡算法比較簡單,就不做介紹了,就是從頭算到尾。

簡單算法系列:快速算法/冒泡算法兩則