K排序算法描述如下:首先,算法需要按照某种规则选择该数列上至多K个位置,将其对应的数抽出其他的数都往左对齐,之后这K个数排好序之后依次做在原数列末尾。以上过程算作一次操作。来例如,对于数列[1,3,5,4,2],当K=2时可以选择数字5和4,之后数列变成[1,3,2,4,5].你的任务是:对于始定的数列,你需要计算出最少需要多少次上述操作,便得整个数列从小到大排好序的C++代码
时间: 2023-05-29 18:07:33 浏览: 106
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main() {
int n, k;
cin >> n >> k;
vector<int> nums(n);
for (int i = 0; i < n; i++) {
cin >> nums[i];
}
int ans = 0;
while (!is_sorted(nums.begin(), nums.end())) { // 如果数列没有排好序
int pos = min(k, n); // 选择最多k个位置抽出
vector<int> temp(nums.begin(), nums.begin() + pos);
sort(temp.begin(), temp.end()); // 排序
nums.erase(nums.begin(), nums.begin() + pos); // 把选择的数从原数列中删除
nums.insert(nums.end(), temp.begin(), temp.end()); // 把排序后的数插入原数列末尾
ans++; // 操作次数加一
}
cout << ans << endl;
return 0;
}
相关问题
K排序算法描述如下:首先,算法需要按照某种规则选择该数列上至多K个位置,将其对应的数抽出其他的数都往左对齐,之后这K个数排好序之后依次做在原数列末尾。以上过程算作一次操作。来例如,对于数列[1,3,5,4,2],当K=2时可以选择数字5和4,之后数列变成[1,3,2,4,5].你的任务是:对于始定的数列,你需要计算出最少需要多少次上述操作,便得整个数列从小到大排好 序
思路:贪心+归并排序
我们考虑贪心策略,每次选择当前未排序部分的最大或最小的K个数,将它们移动到已排序部分的末尾,然后对已排序部分进行归并排序。这样做的正确性在于,我们每次移动的K个数中必然包含了当前未排序部分的最小或最大的数,因此经过归并排序后,这些数会被排在正确的位置上。具体实现上,我们可以先从小到大排序,然后每次选择当前未排序部分的前K个数,将它们移到已排序部分的末尾,再进行归并排序,直到整个数列有序为止。
时间复杂度:$O(n\log n)$
Python代码:
用go语言写一段计算K排序排序次数的算法代码,定义K排序为:首先,算法需要按照某种规则选择数列上至多K个位置,将对应的数抽出来,其他数往左对齐,之后这K个数排序好之后依次放在原数列末尾,以上过程算一次操作
package main
import (
"fmt"
)
func kSort(arr []int, k int) int {
n := len(arr)
count := 0
for i := 0; i < n; i += k {
end := i + k
if end > n {
end = n
}
subArr := arr[i:end]
subLen := len(subArr)
for j := 0; j < subLen; j++ {
minIndex := j
for t := j + 1; t < subLen; t++ {
if subArr[t] < subArr[minIndex] {
minIndex = t
}
}
if minIndex != j {
subArr[j], subArr[minIndex] = subArr[minIndex], subArr[j]
}
}
count++
for j := 0; j < subLen; j++ {
arr[i+j] = subArr[j]
}
}
return count
}
func main() {
arr := []int{9, 7, 3, 5, 6, 8, 1, 2, 4}
k := 3
count := kSort(arr, k)
fmt.Println("排序后的数组:", arr)
fmt.Println("排序次数:", count)
}
阅读全文
相关推荐















