排序算法(二)Sort with Swap(0,*)
对于一个由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,*)相关推荐
- 算法设计与分析——十大经典排序算法二(6--10)
一个不知名大学生,江湖人称菜狗 original author: jacky Li Email : 3435673055@qq.com Time of completion:2023.3.1 Las ...
- 数据结构和算法之五:排序算法二
数据结构基础之排序算法二 学习算法,排序算法当然是不能少的,这次我们来学习一下基础的选择排序,冒泡排序,以及大名鼎鼎的快速排序. 选择排序 选择排序,非常好理解,就是找最小的数放到第一位,然后从第二个 ...
- PAT甲级1067 Sort with Swap(0, i):[C++题解]此题不是很懂!!
文章目录 题目分析 题目来源 题目分析 来源:acwing 分析:y总从图论的角度来讲解的这道题,听得不是很懂. 此题不是很懂,暂留以后探讨.存在鸽的可能. ac代码 #include<bits ...
- 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 ...
- PAT A1067 Sort with Swap(0, i) ——天街小雨润如酥,草色遥看近却无
PAT A1067 Sort with Swap(0, i) 本题使用了姥姥教的方法,通过交换过程(第一个开始动的元素,通过一系列交换到达自己应该在的位置)可以发现他们形成了一个闭环,大家手拉手,每个 ...
- 算法 排序6 Sort with Swap(0, i) 2013年免试研究生上机考试真题
全部每周作业和视频思考题答案和解析 见 浙江大学 数据结构 思考题+每周练习答案 题目:Given any permutation of the numbers {0, 1, 2,..., N−1}, ...
- 排序算法二:归并排序(Merge sort)
归并排序(Merge sort)用到了分治思想,即分-治-合三步,算法平均时间复杂度是O(nlgn). (一)算法实现 1 private void merge_sort(int[] array, i ...
- 7-16 Sort with Swap(0, i) | PTA数据结构与算法——C语言实现
2013年浙江大学免试研究生上机考试真题. 原题链接:PTA | 程序设计类实验辅助教学平台 题目描述 给定包含数字 {0, 1, 2,..., N−1} 的任一排列,很容易对它们进行升序排序. 但是 ...
- 数据结构排序算法实验报告_[数据结构与算法系列]排序算法(二)
我的上一篇文章向大家介绍了排序算法中的冒泡排序.插入排序和选择排序.它们都是平均时间复杂度为 O(n^2) 的排序算法,同时还为大家讲解了什么是原地排序和什么是排序的稳定性.下图是这三种算法的比较,不 ...
- 【题意+分析】1067 Sort with Swap(0, i) (25 分)_24行代码AC
立志用最少的代码做最高效的表达 PAT甲级最优题解-->传送门 Given any permutation of the numbers {0, 1, 2,-, N−1}, it is easy ...
最新文章
- android 两个imageview重叠,在android中覆盖两个图像以设置imageview
- 显示二维数组并计算和
- python举两种字符串引号的例子_python里的单引号和双引号的有什么作用
- 利用FS寄存器获取KERNEL32.DLL基址算法的证明(ZZ)
- 【SICP练习】22 练习1.28
- GTK+图形化应用程序开发学习笔记(二)—Glib库
- 《深入理解Java虚拟机》第5章 调优案例分析与实战
- 采用boost中的property_tree库操作json,xml(vs2008,unicode)
- 怎么制作铁闸门_咖啡师养成记 | 教你做一杯合格的拿铁咖啡
- UNIX系统命令大全
- 简单的Map集合练习题
- 希捷7200.12 固件问题重新上演
- php 引入百度编辑器ueditor
- python逆向切片理解
- 【算法面试题】工厂木材加工问题
- android开发界面转换,ios界面最省时最简单的办法转换成Android界面 – 学ui网
- 戴尔游匣7559更换C面和D面以及升级内存硬盘教程
- 用python画篮球场_如何使用 Python 创建一个 NBA 得分图?
- 800行Python代码实现双十一自动登录抢购商品,这速度女友很爱
- php twig中文手册,使用技巧 · Twig 中文文档 · 看云
热门文章
- #运行后闪退_王者ios14苹果手机闪退已修复,腾讯痛失百万玩家能否再回来
- 枚举的 7 种使用方法
- phphstudy运行不了网站_【SEO优化】企业网站进行SEO优化优那些小技巧
- 1057 字符转数字,判断
- nginx反向代理模块配置详解_nginx反向代理配置详解
- Unity3D实践4:带有出入特效的提示框
- 指针和引用的相同与不同
- ZOJ 3987 2017CCPC秦皇岛 G:Numbers(高精度+贪心)
- opencv 图像基本操作 像素值的获取、图像大小、ROI、通道分割与合并等
- C++ STL string字符串内容修改和替换