Package Main
Import (
"FMT"
"Sync"
)
var waitgroup sync. Waitgroup
Func Main () {
Data: = []int{2, 3, 5, 1, 4, 5, 2, 13, 51, 9, 10, 15, 17, 6, 21, 33, 44, 77, 22}
Fmt. PRINTLN (data)
Waitgroup.add (1)
Go performquicksort (data)
Waitgroup.wait ()
var index = binarysearch (data, 4)
Fmt. PRINTLN (Index)
}
Func performquicksort (data []int) {
Defer Waitgroup.done ()
QuickSort (data, 0, Len (data)-1)
Fmt. PRINTLN (data)
}
Func quickSort (data []int, left int, right int) {
Index: = partition (data, left, right)
If left < index-1 {
QuickSort (data, left, index-1)
}
If right > Index {
QuickSort (data, index, right)
}
}
Func partition (data []int, left int, right int) int {
I: = Left
J: = Right
Pivot: = data[left+ (Right-left)/2]
For I <= J {
For Data[i] < pivot {
i++
}
For Data[j] > pivot {
j--
}
If I <= J {
Temp: = Data[i]
Data[i] = Data[j]
DATA[J] = Temp
i++
j--
}
}
return i;
}
Func binarysearch (data []int, target int) int {
Left: = 0;
Right: = Len (data)-1
For left <= right {
Mid: = left + (right-left)/2
If DATA[MID] < target {
left = mid + 1
}
If Data[mid] >= target {
right = Mid-1
}
}
return left
}
Quick sort and two-point lookup (Go)