【超级难题】大王爱排序

计算机之猪 2024-10-03 16:52:25

大王特别喜欢把序列从小到大排列,如1,2,3,4,5。他认为这样的序列充满美感。现在,大王有一个长度为n的序列Array ,是由n个数字1~n的排列组合而成的,且每个数字仅出现一次。如序列7,3,4,6,5,1,2

大王每次可以选择任意一对整数 (i,j)(i,j) ,使得 1≤i<j≤n1≤i<j≤n .交换 AA 的 ithith​ 和 jthjth​ 位置上的元素。

现在它想知道,这个序列最少经过多少次操作,可以把序列A变换成 (1,2,…,N)(1,2,…,N)?

 

我的代码:

#include <bits/stdc++.h>
using namespace std;

int selection_sort(vector<int>& arr) {
    int s=0,len=arr.size();
    for (int i=0;i<len-1;i++)
    {
        int min=i;
        for (int j=i+1;j<len;j++)
        {
            if (arr[j]<arr[min]) min=j;
        }
        if (min!=i)
        {
            swap(arr[min],arr[i]);s++;
        }
    };return s;
}

int main()
{
    int n=0;cin >> n;vector<int> a(n);
    for (int i=0;i<n;i++) cin >> a[i];
    cout << selection_sort(a) << endl;
}

总是显示超时,时长3秒,但答案正确

求大佬帮助,非常感谢!

...全文
112 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

22,298

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧