【1067】Sort with Swap(0, i) (25 分)

简介: 【1067】Sort with Swap(0, i) (25 分)【1067】Sort with Swap(0, i) (25 分)
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
#include<algorithm>  
#include<map>
#include<vector>
#include<queue> 
using namespace std; 
//key:在i位的0 与 数字i 交换,若0在0号位上则找一个不在本位上的数与0交换
const int maxn=100010;
int pos[maxn]; // 存放各数字当前所处的位置编号
int main(){   
  int n,ans=0;  //ans表示总交换次数
  scanf("%d",&n);
  int left=n-1,num; //left存放除0以外不在本位上的数的个数
  for(int i=0;i<n;i++){ 
    scanf("%d",&num); //依次输入所要排序的数
    pos[num]=i; //num所处的位置为i
    if(num == i && num !=0){  //如果除0以外有再本位上的数
      left--;//令left减1
    }
  }
  int k=1;  //k存放除0以外当前不在本位上的最小的数
  while(left >0) {//只要还有数不在本位上
    //如果0在本位上,则寻找一个当前不在本位上的数与0交换
    if(pos[0]==0){ 
      while( k <n ){
        if(pos[k] !=k){  //找到一个当前不在本位上的数k
          swap(pos[0],pos[k]);  //将k与0交换位置
          ans++;  //交换次数加1
          break;  //退出循环
        }
        k++;//判断k+1是否在本位
      }
    }
    //只要0不在本位,就将0所在位置的数的当前所处位置与0的位置交换
    while(pos[0] !=0){
      swap(pos[0],pos[ pos[0] ]);//将0与pos[0]交换
      ans++;  //交换次数加1
      left--; //不在本位上的数的个数减1
    }
  }
  printf("%d\n",ans);  //输出结果
  system("pause");
    return 0;   
}
相关文章
|
3月前
|
搜索推荐 算法 Java
现有一个接口DataOperation定义了排序方法sort(int[])和查找方法search(int[],int),已知类QuickSort的quickSort(int[])方法实现了快速排序算法
该博客文章通过UML类图和Java源码示例,展示了如何使用适配器模式将QuickSort类和BinarySearch类的排序和查找功能适配到DataOperation接口中,实现算法的解耦和复用。
35 1
现有一个接口DataOperation定义了排序方法sort(int[])和查找方法search(int[],int),已知类QuickSort的quickSort(int[])方法实现了快速排序算法
|
6月前
287--寻找重复数-indexOf-&&-sort
287--寻找重复数-indexOf-&&-sort
31 1
|
6月前
|
存储 分布式计算 搜索推荐
sort-10-bigfile sort 大文件外部排序
这是一个关于排序算法系列的概述,包括冒泡排序、快速排序、选择排序、堆排序、插入排序、希尔排序、归并排序、计数排序、桶排序和大文件外部排序。大文件排序通过文件拆分、独立排序、合并排序和优化合并步骤实现,尤其适用于不能一次性加载到内存中的数据。该方法的时间复杂度为O(n log n),空间复杂度为O(n)。文章提供了一个Java实现的`BigFileSort`类,用于大文件的排序操作。代码中使用了归并排序的策略进行合并,并考虑了磁盘I/O的影响。完整代码可在GitHub的开源项目中找到。
|
6月前
排序——sort的用法
排序——sort的用法
52 0
|
存储 算法 搜索推荐
python实现【计数排序】(Count Sort)
python实现【计数排序】(Count Sort)
python实现【计数排序】(Count Sort)
|
12月前
排序(Sort)(一)
排序(Sort)(一)
85 0
|
12月前
排序(Sort)(二)
排序(Sort)(二)
61 0
|
C++
【PAT甲级 - C++题解】1067 Sort with Swap(0, i)
【PAT甲级 - C++题解】1067 Sort with Swap(0, i)
94 0
【PAT甲级 - C++题解】1067 Sort with Swap(0, i)
LeetCode 167 Two Sum II - Input array is sorted(输入已排序数组,求其中两个数的和等于给定的数)
给定一个有序数组和一个目标值 找出数组中两个成员,两者之和为目标值,并顺序输出
85 0
L2-017 人以群分 (25 分)(sort)
L2-017 人以群分 (25 分)(sort)
141 0