[Go] Golang練習項目-快速排序的GO語言實現

快速排序首先選一個基準(你也能夠認爲是要放到排序後數組正確位置的元素)pivot,而後將數組按照選取的基準 pivot 進行劃分。而選取 pivot 的方式又有不少種,因此快速排序具備不少版本。數組


老是選擇第一個元素做爲基準 pivot;
老是選擇最後一個元素做爲基準;(本文後續的實現就是依次爲例)
隨機的選擇一個元素做爲基準;
選擇最中間的元素做爲基準;測試

快速排序的關鍵是劃分 partion() 。每一趟劃分,咱們就能夠將做爲 pivot 的值 x 放到排序數組的正確位置,而且將全部比 x 小的放到 x 的左邊,全部比 x 大的元素放到 x 的右邊。ui

 

package tools
//劃分
func partition(arr *[]int,left int,right int)int{
	privot:=(*arr)[right]
	i:=left-1
	for j:=left;j<right;j++{
		if (*arr)[j]<privot{
			i++
			temp:=(*arr)[i]
			(*arr)[i]=(*arr)[j]
			(*arr)[j]=temp
		}
	}
	temp:=(*arr)[i+1]
	(*arr)[i+1]=(*arr)[right]
	(*arr)[right]=temp
	return i+1
}
//遞歸
func QuickSort(arr *[]int,left int,right int){
	if left>= right{
		return
	}
	privot:=partition(arr,left,right)
	QuickSort(arr,left,privot-1)
	QuickSort(arr,privot+1,right)
}  

測試用例:blog

package tools

import (
	"testing"
)

func TestQuickSort(t *testing.T) {
	arr:=[]int{1,8,3,9,4,5,4,7}
	t.Log(arr)
	QuickSort(&arr,0,len(arr)-1)
	t.Log(arr)
}

go test -v sorts_test.go sorts.go排序

  

文章轉載自公衆號(景寓)遞歸

相關文章
相關標籤/搜索