最多K次交换冒泡排序
1. 题目描述
冒泡排序(bubble sort)通过在序列中不断比较和交换相邻的两个元素,最终把所有元素按升序排列。规定相邻元素的交换次数不超过K, 比较次数没有限制,求冒泡排序能生成的字典序最小序列。
输入格式:
第一行输入两个正整数N和K (1<N≤10^3), 1≤K≤N(N−1)/2);
接下来一行输入N个整数,用空格分开。所有整数值都在区间[0,10^5]内。输出格式:
在一行中输出排序后的N个整数,用空格分开,末尾的数值后面没有空格。输入样例1:
3 1
2 1 0
输出样例1:
1 2 0
输入样例2:
8 8
3 1 2 0 3 9 8 1
输出样例2:
0 1 2 3 1 3 9 8
2.思路
从数组的第n位(初始n=0)开始,找到在K次交换范围内能找到的最小值,记录其下标为minp,从minp这个位置开始,将其前面的数字依次往后移一位,然后把minp所在位置的数字放到数组的第n位,次数K-=minp-n。
n+1之后,重复上述过程,直到K=0.
3.代码实现
#include<iostream>
#include<algorithm>
using namespace std;
int N,K;
int A[100];
void bubble_sort(const int N, int K)
{for(int n=0;n<N-1&&K; n++) //从当前位置为0开始,只要还有次数K,就往后找{int minp = n;for(int m=n+1,k=0; m<N&&k<K; m++,k++) //找到在K次移动范围内所能得到的最小值{if(A[m]<A[minp]){minp = m;}}int temp = A[minp]; //记录找到的最小元素for(int j=minp; j>n; j--) //将最小元素前面的元素向后移动{A[j] = A[j-1];}A[n] = temp; //将最小元素放到当前合适的位置(即n)K -= minp - n; //次数K被消耗了minp-n次}
}int main()
{cin >> N >> K;for(int i=0; i<N; i++){int num;cin >> num;A[i] = num;}bubble_sort(N,K);for(int i=0; i<N; i++){cout << A[i] << " ";}system("pause");return 0;}
最多K次交换冒泡排序相关推荐
- 20200716:最多 K 次交换相邻数位后得到的最小整数(leetcode 1505)
最多 K 次交换相邻数位后得到的最小整数 题目 思路与算法 代码实现 复杂度分析 题目 思路与算法 这题没啥思路上的障碍,我们先模拟一遍整个过程 4321,首先把1挪到最前面,也就是需要三步,4321 ...
- 5455. 最多 K 次交换相邻数位后得到的最小整数
题目 给你一个字符串 num 和一个整数 k .其中,num 表示一个很大的整数,字符串中的每个字符依次对应整数上的各个 数位 . 你可以交换这个整数相邻数位的数字 最多 k 次. 请你返回你能得到的 ...
- 股票买入卖出问题 leetcode123(最多k次交易)
leetcode123 问题链接 https://leetcode.com/problems/best-time-to-buy-and-sell-stock-iv/ 给定一些天数的股票价格list, ...
- 邻居交换——冒泡排序
相信大家看了上篇博客了解了我们简化版的桶排序有一定的局限性,对于数字大的占用空间严重并且无法处理小数,所以这节课给大家讲比桶排序的实用性高一点的冒泡排序. 首先冒泡排序的核心思想就是比较相邻的两个元素 ...
- JZOJ 5253. 排列与交换
Description 一个数组A = [1, 2, 3, -, n]. 对A进行好恰好k次相邻交换,能得到多少个不同的序列 (S1)? 对A进行最多k次交换,你能得到多少个不同的序列 (S2)? 一 ...
- 贪心(Greedy Algorithm)
贪心(Greedy Algorithm) 贪心 44.通配符匹配 45.跳跃游戏 II 55.跳跃游戏 122.买卖股票的最佳时机II 134.加油站 135.分发糖果 179.最大数 277.搜寻名 ...
- LeeCode 5455 贪心 + BIT
题意 传送门 LeeCode 5455. 最多 K 次交换相邻数位后得到的最小整数 题解 求最小整数,贪心地将尽可能小的数字移动到尽可能高的位数上.从最高位开始,每次处理一位:从小到大枚举数字 0−9 ...
- C语言基本数据结构之五(折半插入,堆排序,冒泡排序,快速排序,并归排序)
上一篇大概写了序列的查找算法,这次就聊聊序列的几种重要的排序(大神自动飘过~~~) 一.算法分析 1.1 直接插入排序 基本思想:将文件中的记录分为有序区.无序区,不断地从无序区中顺序提取记录,按关键 ...
- 动态规划 冒泡排序 爱奇艺2018招聘
这次分析一下2018年爱奇艺招聘的冒泡排序的题目. 题目描述:牛牛学习了冒泡排序,并写下以下冒泡排序的伪代码,注意牛牛排序的数组a是从下标0开始的. BubbleSort(a):Repeat leng ...
最新文章
- c语言链表容易犯的错误,急求大牛啊这个容易的链表到底在哪出错了
- Sqlserver内存管理:限制最大占用内存(转载)
- Oracle tips
- bzoj2127 happiness 最小割
- python科学计算库-数值计算库与科学计算库
- 联想拯救者Y90电竞旗舰正式入网:搭载三星E4 OLED屏 支持144Hz刷新率
- c语言实现单链表数据结构,数据结构与算法-C语言实现单链表,以及单链表的常用方法...
- win10下Redis安装、启动教程
- Xcode打包踩过的那些坑
- (转)LIB和DLL的区别与使用
- 这40份酷炫的 Python 可视化大屏,简直太爱了
- Java Web程序设计笔记 • 【目录】
- SWF加密之防反翻译
- var模型的建模步骤python_Python语言之概述建模步骤
- 手机应用市场优劣势比较
- 32位计算机的内存限额,32位系统支持多大内存 如何完全使用32位4G内存
- 计算机中数值数据的表示
- MacBook 更新Big Sur后,虚拟机无法运行时显示该主机 CPU 类型不支持虚拟化性能计数器,模块“VPMC”启动失败,未能启动虚拟机
- 基于JAVA心灵治愈服务平台计算机毕业设计源码+系统+数据库+lw文档+部署
- 解决谷歌浏览器启动页面默认是搜狗浏览?