1067.Sort with Swap(0,*) (25)...to be continued...

1067.Sort with Swap(0,*) (25)…to be continued…

pat-al-1067

2017-03-01

  • pos[i]的內容表示的是:數字i所在的位置;這樣來簡化操作。
  • 一個注意的地方,如果0換到最終位置上要把它跟不在自己最終位置上的數(此處選的是最小的那個)交換;而且本次交換也要記錄
  • 搞不懂的話先手工模擬一下
/**
 * pat-al-1067
 * 2017-03-01
 * Cpp version
 * Author: fengLian_s
 */
#include<stdio.h>
#include<algorithm>
#define MAX 100010
using namespace std;
int main()
{
  freopen("in.txt", "r", stdin);
  int n, pos[MAX], num, diffrent, min = 1, tmp, cnt = 0;
  scanf("%d", &n);
  diffrent = n-1;
  for(int i = 0;i < n;i++)
  {
    scanf("%d", &num);
    pos[num] = i;
    if(num == i)
      diffrent--;
  }
  while(diffrent > 0)
  {
    if(pos[0] == 0)
    {
      while(min < n)
      {
        if(pos[min] != min)
        {
          swap(pos[0], pos[min]);
          cnt++;
          break;
        }
        min++;
      }
    }
    while(pos[0] != 0)
    {
      swap(pos[0], pos[pos[0]]);
      diffrent--;
      cnt++;
      // for(int i = 0;i < n;i++)
      // {
      //   for(int j = 0;j < n;j++)
      //   {
      //     if(pos[j] == i)
      //       printf("%d ", j);
      //   }
      // }
      // putchar('\n');
    }
    //printf("diffrent = %d\n", diffrent);
  }
  printf("%d\n", cnt);
  return 0;
}

-TBC-

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章