给定一个正整数 n (1 <= n <= 1e6),请你构造出一个大小为 n 的排列数组 a , 使数组 a 在经典冒泡排序(将数组从小到大排序)函数(参考下方代码)下得到的交换次数 count 为 k (0 <= k <= n*(n-1)/2).
排列数组定义:数组的大小为 n, 且数组只包含 [1, n] 范围内的元素,并且数组中任意两个元素互不相同,例如:数组 {3, 5, 1, 4, 2} 是一个大小为 5 排列数组, 数组 {3, 1, 4, 3, 2} 不是一个排列数组,因为数组中包含 2 个元素 3 ,不满足数组中任意两个元素互不相同.
如果有多种答案满足要求,输出任意一种即可。
C/C++版本:
long long getBubbleSortSwapCount(int a[], int n) {
long long count = 0;
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - i - 1; j++) {
if (a[j] > a[j + 1]) {
count++;
int temp = a[j + 1];
a[j + 1] = a[j];
a[j] = temp;
}
}
}
return count;
}
Java版本:
public static long getBubbleSortSwapCount(int[] a, int n) {
long count = 0;
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - i - 1; j++) {
if (a[j] > a[j + 1]) {
count++;
int temp = a[j + 1];
a[j + 1] = a[j];
a[j] = temp;
}
}
}
return count;
}
Python版本:
def get_bubble_sort_swap_count(a, n):
count = 0
for i in range(n - 1):
for j in range(n - i - 1):
if a[j] > a[j + 1]:
count += 1
a[j], a[j + 1] = a[j + 1], a[j]
return count