对于一个由0到N-1的序列,如果只能交换0和另一个数的位置,求多少次能够将序列变为递增序列。

输入为<N> <序列>(N和序列之间有一个空格,序列元素之间均有一个空格)。

设序列存储在数组A里。

一个直接的思路是将0和0所在位置应有的元素交换,如果0到达了0号位置但是序列没有完全变成递增序列,则让0和一个没有归位的元素进行一个废交换,然后再进行后续的交换。

一个独特的思路是,将0应在位置的元素(即A[0])换到它应该在的位置(例如A[0]=3,则把A[0]和A[3]交换),不断这样交换,直到0真正到了0位置,判断一下是否全部归位,不然的话就把0换到第一个没有归位的元素上,其实这一步就是上面的废交换,接下来再重复进行上面的交换,直到序列变为递增序列。要注意的是,每次检索第一个没有归位的元素时,起步的值根据A[0]所交换的位置开始,否则会超时。下面的算法用这个思路实现。

#include <iostream>
using namespace std;int FirstNotRight(int* A, int begin, int end){for (int i = begin; i <= end; i++){if (*(A + i) != i)return i;}return 0;
}void Swap(int* a, int *b){int temp = *a;*a = *b;*b = temp;
}int main(){int N;int input;cin >> N;int* A = (int*)malloc((N + 1)*sizeof(int));for (int i = 0; i < N; i++){scanf("%d", &input);*(A + i) = input;}int cur = FirstNotRight(A, 1, N - 1);int count = 0;while (cur != 0){if (*A == 0){Swap(A, A + cur);count++;}while (*A != 0){int curtoswap = *A;Swap(A, A + curtoswap);count++;}cur = FirstNotRight(A, cur, N - 1);}cout << count << endl;return 0;
}

转载于:https://www.cnblogs.com/aiwz/p/6154260.html

排序算法(二)Sort with Swap(0,*)相关推荐

  1. 算法设计与分析——十大经典排序算法二(6--10)

    一个不知名大学生,江湖人称菜狗 original author: jacky Li Email : 3435673055@qq.com  Time of completion:2023.3.1 Las ...

  2. 数据结构和算法之五:排序算法二

    数据结构基础之排序算法二 学习算法,排序算法当然是不能少的,这次我们来学习一下基础的选择排序,冒泡排序,以及大名鼎鼎的快速排序. 选择排序 选择排序,非常好理解,就是找最小的数放到第一位,然后从第二个 ...

  3. PAT甲级1067 Sort with Swap(0, i):[C++题解]此题不是很懂!!

    文章目录 题目分析 题目来源 题目分析 来源:acwing 分析:y总从图论的角度来讲解的这道题,听得不是很懂. 此题不是很懂,暂留以后探讨.存在鸽的可能. ac代码 #include<bits ...

  4. 1067 Sort with Swap(0, i) (25 分)

    1067 Sort with Swap(0, i) (25 分) Given any permutation of the numbers {0, 1, 2,..., N−1}, it is easy ...

  5. PAT A1067 Sort with Swap(0, i) ——天街小雨润如酥,草色遥看近却无

    PAT A1067 Sort with Swap(0, i) 本题使用了姥姥教的方法,通过交换过程(第一个开始动的元素,通过一系列交换到达自己应该在的位置)可以发现他们形成了一个闭环,大家手拉手,每个 ...

  6. 算法 排序6 Sort with Swap(0, i) 2013年免试研究生上机考试真题

    全部每周作业和视频思考题答案和解析 见 浙江大学 数据结构 思考题+每周练习答案 题目:Given any permutation of the numbers {0, 1, 2,..., N−1}, ...

  7. 排序算法二:归并排序(Merge sort)

    归并排序(Merge sort)用到了分治思想,即分-治-合三步,算法平均时间复杂度是O(nlgn). (一)算法实现 1 private void merge_sort(int[] array, i ...

  8. 7-16 Sort with Swap(0, i) | PTA数据结构与算法——C语言实现

    2013年浙江大学免试研究生上机考试真题. 原题链接:PTA | 程序设计类实验辅助教学平台 题目描述 给定包含数字 {0, 1, 2,..., N−1} 的任一排列,很容易对它们进行升序排序. 但是 ...

  9. 数据结构排序算法实验报告_[数据结构与算法系列]排序算法(二)

    我的上一篇文章向大家介绍了排序算法中的冒泡排序.插入排序和选择排序.它们都是平均时间复杂度为 O(n^2) 的排序算法,同时还为大家讲解了什么是原地排序和什么是排序的稳定性.下图是这三种算法的比较,不 ...

  10. 【题意+分析】1067 Sort with Swap(0, i) (25 分)_24行代码AC

    立志用最少的代码做最高效的表达 PAT甲级最优题解-->传送门 Given any permutation of the numbers {0, 1, 2,-, N−1}, it is easy ...

最新文章

  1. android 两个imageview重叠,在android中覆盖两个图像以设置imageview
  2. 显示二维数组并计算和
  3. python举两种字符串引号的例子_python里的单引号和双引号的有什么作用
  4. 利用FS寄存器获取KERNEL32.DLL基址算法的证明(ZZ)
  5. 【SICP练习】22 练习1.28
  6. GTK+图形化应用程序开发学习笔记(二)—Glib库
  7. 《深入理解Java虚拟机》第5章 调优案例分析与实战
  8. 采用boost中的property_tree库操作json,xml(vs2008,unicode)
  9. 怎么制作铁闸门_咖啡师养成记 | 教你做一杯合格的拿铁咖啡
  10. UNIX系统命令大全
  11. 简单的Map集合练习题
  12. 希捷7200.12 固件问题重新上演
  13. php 引入百度编辑器ueditor
  14. python逆向切片理解
  15. 【算法面试题】工厂木材加工问题
  16. android开发界面转换,ios界面最省时最简单的办法转换成Android界面 – 学ui网
  17. 戴尔游匣7559更换C面和D面以及升级内存硬盘教程
  18. 用python画篮球场_如何使用 Python 创建一个 NBA 得分图?
  19. 800行Python代码实现双十一自动登录抢购商品,这速度女友很爱
  20. php twig中文手册,使用技巧 · Twig 中文文档 · 看云

热门文章

  1. #运行后闪退_王者ios14苹果手机闪退已修复,腾讯痛失百万玩家能否再回来
  2. 枚举的 7 种使用方法
  3. phphstudy运行不了网站_【SEO优化】企业网站进行SEO优化优那些小技巧
  4. 1057 字符转数字,判断
  5. nginx反向代理模块配置详解_nginx反向代理配置详解
  6. Unity3D实践4:带有出入特效的提示框
  7. 指针和引用的相同与不同
  8. ZOJ 3987 2017CCPC秦皇岛 G:Numbers(高精度+贪心)
  9. opencv 图像基本操作 像素值的获取、图像大小、ROI、通道分割与合并等
  10. C++ STL string字符串内容修改和替换