“冒泡法”将当前数组里最大的一个元素通过若干次相邻元素的交换,冒到顶部(即排到正确的位置)。然后将数组规模减小1,对这个子数组重复冒泡过程,执行n-1遍后当前数组即为有序数组。选择排序实际是对“冒泡法”的优化算法:每次只需一次交换就可以将一个元素放到正确的位置。对于当前数组,通过一次扫描,查找数组中的最小元素。然后将最小元素与当前数组中第一个元素交换。对从二个元素开始到最后元素结束的这个子数组重复这个过程。执行n-1遍后有序。这种排序与冒泡排序相似,对于n个元素的数组,要n-1遍,对每个子数组,要用n-1次比较以求得最小值。当处理包含一个元素的子数组时,数组已经排序完毕。编写递归程序,完成这个算法。
输入格式
第一行:一个整数n(n<=100)
第二行:n个整数a[i](保证a[i]在int范围内)
输出格式
按倒序(从最后一步到第一步)输出若干次交换步骤,以 i<->j:当前数组 的形式输出,i和j表示进行交换的两个元素在当前数组中的下标(从1开始,j是当前找到的最小元素的下标),每个步骤占一行;(如果a[i]本来就在正确的位置,则不需要交换)
紧接一行:以Total steps:tot 的形式输出,tot表示总的交换次数;
最后一行:以Right order:正确序列 的形式输出。
输入样例
5
3 1 2 4 5
输出样例
2<->3:1 2 3 4 5
1<->2:1 3 2 4 5
Total steps:2
Right order:1 2 3 4 5