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次交换冒泡排序相关推荐

  1. 20200716:最多 K 次交换相邻数位后得到的最小整数(leetcode 1505)

    最多 K 次交换相邻数位后得到的最小整数 题目 思路与算法 代码实现 复杂度分析 题目 思路与算法 这题没啥思路上的障碍,我们先模拟一遍整个过程 4321,首先把1挪到最前面,也就是需要三步,4321 ...

  2. 5455. 最多 K 次交换相邻数位后得到的最小整数

    题目 给你一个字符串 num 和一个整数 k .其中,num 表示一个很大的整数,字符串中的每个字符依次对应整数上的各个 数位 . 你可以交换这个整数相邻数位的数字 最多 k 次. 请你返回你能得到的 ...

  3. 股票买入卖出问题 leetcode123(最多k次交易)

    leetcode123 问题链接 https://leetcode.com/problems/best-time-to-buy-and-sell-stock-iv/ 给定一些天数的股票价格list, ...

  4. 邻居交换——冒泡排序

    相信大家看了上篇博客了解了我们简化版的桶排序有一定的局限性,对于数字大的占用空间严重并且无法处理小数,所以这节课给大家讲比桶排序的实用性高一点的冒泡排序. 首先冒泡排序的核心思想就是比较相邻的两个元素 ...

  5. JZOJ 5253. 排列与交换

    Description 一个数组A = [1, 2, 3, -, n]. 对A进行好恰好k次相邻交换,能得到多少个不同的序列 (S1)? 对A进行最多k次交换,你能得到多少个不同的序列 (S2)? 一 ...

  6. 贪心(Greedy Algorithm)

    贪心(Greedy Algorithm) 贪心 44.通配符匹配 45.跳跃游戏 II 55.跳跃游戏 122.买卖股票的最佳时机II 134.加油站 135.分发糖果 179.最大数 277.搜寻名 ...

  7. LeeCode 5455 贪心 + BIT

    题意 传送门 LeeCode 5455. 最多 K 次交换相邻数位后得到的最小整数 题解 求最小整数,贪心地将尽可能小的数字移动到尽可能高的位数上.从最高位开始,每次处理一位:从小到大枚举数字 0−9 ...

  8. C语言基本数据结构之五(折半插入,堆排序,冒泡排序,快速排序,并归排序)

    上一篇大概写了序列的查找算法,这次就聊聊序列的几种重要的排序(大神自动飘过~~~) 一.算法分析 1.1 直接插入排序 基本思想:将文件中的记录分为有序区.无序区,不断地从无序区中顺序提取记录,按关键 ...

  9. 动态规划 冒泡排序 爱奇艺2018招聘

    这次分析一下2018年爱奇艺招聘的冒泡排序的题目. 题目描述:牛牛学习了冒泡排序,并写下以下冒泡排序的伪代码,注意牛牛排序的数组a是从下标0开始的. BubbleSort(a):Repeat leng ...

最新文章

  1. c语言链表容易犯的错误,急求大牛啊这个容易的链表到底在哪出错了
  2. Sqlserver内存管理:限制最大占用内存(转载)
  3. Oracle tips
  4. bzoj2127 happiness 最小割
  5. python科学计算库-数值计算库与科学计算库
  6. 联想拯救者Y90电竞旗舰正式入网:搭载三星E4 OLED屏 支持144Hz刷新率
  7. c语言实现单链表数据结构,数据结构与算法-C语言实现单链表,以及单链表的常用方法...
  8. win10下Redis安装、启动教程
  9. Xcode打包踩过的那些坑
  10. (转)LIB和DLL的区别与使用
  11. 这40份酷炫的 Python 可视化大屏,简直太爱了
  12. Java Web程序设计笔记 • 【目录】
  13. SWF加密之防反翻译
  14. var模型的建模步骤python_Python语言之概述建模步骤
  15. 手机应用市场优劣势比较
  16. 32位计算机的内存限额,32位系统支持多大内存 如何完全使用32位4G内存
  17. 计算机中数值数据的表示
  18. MacBook 更新Big Sur后,虚拟机无法运行时显示该主机 CPU 类型不支持虚拟化性能计数器,模块“VPMC”启动失败,未能启动虚拟机
  19. 基于JAVA心灵治愈服务平台计算机毕业设计源码+系统+数据库+lw文档+部署
  20. 解决谷歌浏览器启动页面默认是搜狗浏览?

热门文章

  1. 特征可视化技术(CAM)
  2. 面试必考之Java基础数据类型
  3. 基于matlab fdma传输系统设计,基于matlab频分复用系统的研究与仿真设计3695.doc
  4. 智能音箱背后的自然语言理解和知识图谱技术
  5. jobunit: calljob
  6. 如何监控Redis性能指标
  7. Python---day7作业
  8. 最大正方形面积/数量(单调栈)
  9. JavaScript看这一篇就够了,简单全面一发入魂
  10. 中投董事长:黑石是很好投资 持有两房债会赚钱