當前位置:成語大全網 - 新華字典 - c++代碼,求助!!!!急用!!!

c++代碼,求助!!!!急用!!!

下面是使用 C++ 編寫的實現代碼:

#include <iostream>

#include <algorithm>

using namespace std;

const int N = 1e5;

int n, k, a[N];

int main()

{

cin >> n >> k;

for(int i = 0; i < n; i++) cin >> a[i];

for(int i = 0; i < n;)

{

int t = min(i + k + 1, n); // 計算操作區間 [i + 1, t) 的右端點

auto it = min_element(a + i, a + t); // 找到操作區間中的最小值

if(it - a > i) // 如果最小值不在區間起點,執行交換操作

for(int j = it - a; j > i; j--) swap(a[j], a[j-1]);

i++;

}

for(int i = 0; i < n; i++) cout << a[i] << " ";

cout << endl;

return 0;

}

該代碼采用貪心算法,每次從當前位置開始向右選取區間 [i+1, t)進行操作,其中右端點 t的計算方式為 t=\min(i+k+1,n);然後在該區間中找到最小值,並且如果最小值不在區間起點,那麽就依次向左與前面的數進行交換,直到最小值位置為止。通過這樣的方式可以使得字典序盡量小。