#joi2013ho5. [joi2013ho5]バブルソート (Bubble Sort)
[joi2013ho5]バブルソート (Bubble Sort)
バブルソートと是什么?
バブルソート是一种用于排序列表的算法之一。假设我们想要将长度为 的数列 按升序进行排序。当存在相邻的两个数的大小关系不正确时,就交换它们的位置。通过从前向后顺序遍历数列来实现这一点。也就是说,如果存在 的位置,就交换这两个数,对于 ,按此顺序进行操作称为一次遍历。通过重复执行这个遍历 次,可以将数列按升序排序。
数列 的交换次数是指:
在对数列 应用上述算法时,进行整数交换的次数。(对于被称为冒泡排序的算法和实现,循环的顺序、范围和结束条件可能略有不同。但是已知,应用于相同的数列时,整数交换的次数不会因这些差异而改变。)
例如,下面的程序是用 C 语言编写的一个使用冒泡排序对长度为 n
的整数数组 a
进行排序的函数。
`void bubble_sort(int *a, int n) { int i, j; for (i = 0; i < n - 1; ++i) { for (j = 0; j < n - 1; ++j) { if (a[j] > a[j + 1]) { /* The following 3 lines correspond to one exchange of integers */ int x = a[j]; a[j] = a[j + 1]; a[j + 1] = x; } } } }`
问题
给定一个长度为 的数列 。假设通过仅交换数列 中任意两个整数一次,得到了数列 。请编写一个程序,求出数列 的冒泡排序所需的最小交换次数。(注意:初始时交换的两个整数不一定是相邻的。)
限制条件