mirror of
https://github.com/avelino/awesome-go.git
synced 2024-11-14 16:42:23 +00:00
53 lines
1.4 KiB
Go
53 lines
1.4 KiB
Go
package main
|
|
|
|
import "fmt"
|
|
|
|
// Function to partition the array
|
|
func partition(arr []int, low, high int) int {
|
|
// Choose the rightmost element as pivot
|
|
pivot := arr[high]
|
|
// Index of smaller element and indicates the right position
|
|
// of pivot found so far
|
|
i := low - 1
|
|
|
|
for j := low; j <= high-1; j++ {
|
|
// If current element is smaller than or equal to pivot
|
|
if arr[j] <= pivot {
|
|
// Increment index of smaller element
|
|
i++
|
|
// Swap arr[i] and arr[j]
|
|
arr[i], arr[j] = arr[j], arr[i]
|
|
}
|
|
}
|
|
|
|
// Swap arr[i+1] and arr[high] (or pivot)
|
|
arr[i+1], arr[high] = arr[high], arr[i+1]
|
|
// Return partition index + 1
|
|
return i + 1
|
|
}
|
|
|
|
// Function implementing QuickSort
|
|
func quickSort(arr []int, low, high int) {
|
|
if low < high {
|
|
// Find pivot index such that, all elements left to pivot are smaller and
|
|
// all elements right to pivot are greater
|
|
pi := partition(arr, low, high)
|
|
// Recursively apply the same on left and right partitions
|
|
quickSort(arr, low, pi-1)
|
|
quickSort(arr, pi+1, high)
|
|
}
|
|
}
|
|
|
|
func main() {
|
|
// Input array
|
|
arr := []int{64, 34, 25, 12, 22, 11, 90}
|
|
// Get length of the array
|
|
n := len(arr)
|
|
|
|
// Call quickSort function
|
|
quickSort(arr, 0, n-1)
|
|
|
|
// Print the sorted array
|
|
fmt.Println("Sorted array is:", arr)
|
|
}
|