[PAT-A 1067]Sort with Swap(0, i)
题目大意: 给出0,1,…n-1的一个序列,要求通过两两狡猾的方式将其变为递增序列,但规定每次只能用0与其他数交换,求最小交换次数 思路: 1)如果数字0在i号位,找见数字i当前所处的位置,然后把0与i交换。 2)一旦一个非0的数字回到了它原先的位置,后面的步骤中就不用与0进行交换。 3)如果在交换过程中出现了0在0号位的情况,就随意选择一个没有在本位的数字与0交换位置 4)可以使用int型变量 count记录除0意外不在本位上的个数,并在读入时预处理其值。 5)在循环中找见一个不在本位上的数时,如果每一次都从头开始枚举,则会有两组数据超时 应当利用每一个移回本位的数不再移动的特点,从整体上定义一个变量k,用来保存目前不在本位上的最小数,当交换过程中出现0回归本位的情况, 总是从当前的k开始继续增大寻找不在本位上的数, 样例: 初始:[3 5 7 2 6 4 9 0 8 1] 第一步:0在7号位,与7交换:[3 5 0 2 6 4 9 7 8 1] 第二布:0在2号位,与2交换:[3 5 2 0 6 4 9 7 8 1] 第三步:0在3号位,与3交换:[0 5 2 3 6 4 9 7 8 1] 第四步:0在0号位,与一个还未在本位的数字5交换:[5 0 2 3 6 4 9 7 8 1] 第五步:0在1号位,与1交换:[5 1 2 3 6 4 9 7 8 0] 第六步:0在9号位