用go语言写一段计算K排序最少的排序次数的算法代码,定义K排序为:首先,算法需要将数组中的元素从小到大排列,按照某种规则选择数列上至多K个位置,将对应的数抽出来,其他数往左对齐,之后这K个数排序好之后依次放在原数列末尾,以上过程算一次操作
时间: 2023-05-29 18:04:47 浏览: 141
package main
import (
"fmt"
"sort"
)
func kSort(arr []int, k int) int {
n := len(arr)
count := 0
for i := 0; i < n; {
if i+k >= n {
sort.Ints(arr[i:])
break
}
subArr := arr[i : i+k+1]
sort.Ints(subArr)
for j := i + k; j > i; j-- {
arr[j], arr[j-1] = arr[j-1], arr[j]
}
arr[i+k] = subArr[k]
i += k
count++
}
return count
}
func main() {
arr := []int{3, 5, 1, 4, 6, 2}
k := 2
count := kSort(arr, k)
fmt.Printf("Sorted array: %v\n", arr)
fmt.Printf("Minimum number of sort operations: %d\n", count)
}
相关问题
用go语言写一段计算K排序最少排序次数的算法代码,定义K排序为:首先,算法需要将数组中的元素从小到大排列,按照某种规则选择数列上至多K个位置,将对应的数抽出来,其他数往左对齐,之后这K个数排序好之后依次放在原数列末尾,以上过程算一次操作
```go
package main
import (
"fmt"
"sort"
)
func kSort(nums []int, k int) int {
n := len(nums)
sorted := make([]int, n)
copy(sorted, nums)
sort.Ints(sorted)
cnt := 0
for i := 0; i < n; i++ {
if nums[i] != sorted[i] {
cnt++
if i+k <= n {
subset := nums[i : i+k]
sort.Ints(subset)
copy(nums[i:i+k], subset)
} else {
subset := nums[i:n]
sort.Ints(subset)
copy(nums[i:n], subset)
}
}
}
return cnt
}
func main() {
nums := []int{3, 1, 5, 4, 2}
k := 2
cnt := kSort(nums, k)
fmt.Println(cnt) // 输出 2
}
```
阅读全文