###### tags: `LeetCode` `HackRank`
# HackRank Minimum Swaps 2
## Goal
尋找最小交換次數,將陣列排序好
## Solution
```
func minimumSwaps(arr []int32) int32 {
intital := make([]int32, len(arr), (cap(arr)+1)*2)
copy(intital,arr)
quicksort(arr) //先排序找到最後目標
var Map map[int32]int32
Map = make(map[int32]int32)
//建立目標索引
for i ,value := range(arr) {
Map[value] = int32(i)
}
count := int32(0)
index := int32(0)
//當前陣列與目標陣列不同時將目標陣列的時候,用索引找交換的位置
//重覆到陣列完全相同
for ;index < int32(len(arr)); {
if ( arr[index] != intital[index]) {
intital[index] , intital[ Map[intital[index]]] = intital[ Map[intital[index]]] , dest[index]
count ++
} else {
index++
}
}
index++
return count
}
```
```
func quicksort(a []int32 ) {
if len(a) < 2 {
return
}
left , right := 0 , len(a)-1
pivot := rand.Int() % len(a)
a[pivot] , a[right] = a[right] , a[pivot]
for i,_ := range a {
if a[i] < a[right] {
a[left] , a[i] = a[i] , a[left]
left++
}
}
a[left],a[right] = a[right],a[left]
quicksort(a[:left])
quicksort(a[left+1:])
return
}
```