A1067 Sort with Swap(0, i) (25 分)

a 夏天 提交于 2019-12-04 09:09:39

一、技术总结

  1. 题目要求是,只能使用0,进行交换位置,然后达到按序排列,所使用的最少交换次数
  2. 输入时,用数组记录好每个数字所在的位置。
  3. 然后使用for循环,查看i当前位置是否为该数字,核心是等待0回到自己的位置上,如果没有一直与其他的数字进行交换。如果这个过程中,i回到自己位置上就不用调换,如果不是那么直接与0位置进行调换,直到所有位置都到指定位置上面。

二、参考代码

#include<iostream>
#include<algorithm>
using namespace std;
int main(){
    int n, ans = 0, a[100010], t;
    cin >> n;
    for(int i = 0; i < n; i++){
        cin >> t;
        a[t] = i;
    }
    for(int i = 1; i < n; i++){
        if(i != a[i]){
            while(a[0] != 0){
                swap(a[0], a[a[0]]);
                ans++;
            }
            if(i != a[i]){
                swap(a[0], a[i]);
                ans++;
            }
        }
    }
    cout << ans;
    return 0;
    
}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!