C语言代码实现:
#include <stdio.h>
#include <stdlib.h>
// 交换数组中两个元素的位置
void swap(int *a, int *b)
{
int temp = *a;
*a = *b;
*b = temp;
}
// 计算给定排列的下一个排列(按照字典序)
int next_permutation(int *arr, int n)
{
int i = n - 2;
while (i >= 0 && arr > arr[i + 1])
{
i--;
}
if (i < 0)
{
return 0;
}
int j = n - 1;
while (arr[j] < arr)
{
j--;
}
swap(&arr, &arr[j]);
int left = i + 1, right = n - 1;
while (left < right) {
swap(&arr[left], &arr[right]);
left++;
right--;
}
return 1;
}
int main() {
int n, m,i;
scanf("%d", &n);
scanf("%d", &m);
int *arr = (int *)malloc(n * sizeof(int)); // 动态分配内存
for (i = 0; i < n; i++)
{
scanf("%d", &arr);
}
for (i = 0; i < m; i++)
{
next_permutation(arr, n);
}
for (i = 0; i < n; i++)
{
printf("%d", arr);
if (i!= n - 1)
{
printf(" ");
}
}
free(arr);
return 0;
}