zoukankan      html  css  js  c++  java
  • 无序数 按升序排序需要换几次

    输入n
    然后n个数字
    输出需要换几次
    View Code
    #include<cstdio>
    #include
    <iostream>
    #include
    <algorithm>
    using namespace std;

    struct data
    {
    int val;
    int no;
    int N;
    }a[
    500009];

    int hash[500009];

    int cmp(data a,data b)
    {
    return a.val<b.val;
    }

    int cmp1(data a,data b)
    {
    return a.no<b.no;
    }

    int main()
    {
    int n;
    while(scanf("%d",&n),n)
    {
    int i;
    for(i=1;i<=n;i++)
    {
    scanf(
    "%d",&a[i].val);
    a[i].no
    =i;
    }

    sort(
    &a[1],&a[n+1],cmp);
    for(i=1;i<=n;i++)
    {
    a[i].N
    =i;
    }
    sort(
    &a[1],&a[n+1],cmp1);

    for(i=1;i<=n;i++)
    {
    hash[a[i].no]
    =a[i].N;
    }

    int all=0;
    for(i=1;i<=n;i++)
    {
    int add=0;
    int temp=i;
    while(hash[a[temp].no]!=-1&&hash[a[temp].no]!=a[temp].no)
    {
    int re=hash[a[temp].no];
    hash[a[temp].no]
    =-1;
    temp
    =re;
    add
    ++;
    }
    if(add>=1)
    all
    +=add-1;
    }
    printf(
    "%d\n",all);
    }
    }

      

  • 相关阅读:
    旺旺狗
    写在父亲离世周年
    老家老院
    玉米粒自传
    记念父亲
    26年前来蒙阴
    玉米粒自传
    pywin32安装
    linux中源码安装mysql
    在Linux上搭建禅道
  • 原文地址:https://www.cnblogs.com/huhuuu/p/2107344.html
Copyright © 2011-2022 走看看