栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

2020年第十一届蓝桥杯 - 省赛 - Java研究生组+Java大学B组+Python大学组 - E.排序

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

2020年第十一届蓝桥杯 - 省赛 - Java研究生组+Java大学B组+Python大学组 - E.排序

Ideas

冒泡排序在最坏情况下(完全逆序)的交换次数为 c n t = n ( n − 1 ) 2 cnt=frac{n(n-1)}{2} cnt=2n(n−1)​,当n=14时,cnt=91,当n=15时,cnt=105。

要求字典序最小,cnt=105代表:由前15个字母组成的逆序排列进行冒泡排序需要交换105次。

15个字母组成的逆序排列:onmlkjihgfedcba,这种情况需要105此交换,所以我们要给它减少5次交换,即将某一位置的字母向前移动5位,为了保证字典序最小,我们把第6位的字母j移动到第1位:jonmlkihgfedcba,也就是说,前5次比较过程不进行位置交换。

然后我们可以写一个冒泡排序验证一下。

Code C++
#include  

using namespace std;

int bubble_sort_cnt(char arr[], int n) {
	int cnt = 0;
	for(int i = n - 1; i > -1; i--) {
		for(int j = 0; j < i; j++) {
			if(arr[j] > arr[j + 1]) {
				cnt++;
				swap(arr[j], arr[j + 1]);
			}
		}
	}
	return cnt;
}

int main() {
	int n = 15;
	char a[n] = {'j', 'o', 'n', 'm', 'l', 'k', 'i', 'h', 'g', 'f', 'e', 'd', 'c', 'b', 'a'};
	
	cout << bubble_sort_cnt(a, n);
}
Python
def bubbleSortCnt(arr: list) -> int:
	cnt = 0
	for i in range(len(arr) - 1, -1, -1):
		for j in range(i):
			if arr[j] > arr[j + 1]:
				cnt += 1
				arr[j], arr[j + 1] = arr[j + 1], arr[j]
	return cnt


if __name__ == '__main__':
	print(bubbleSortCnt(list("onmlkjihgfedcba")))
	print(bubbleSortCnt(list("jonmlkihgfedcba")))
Answer:jonmlkihgfedcba
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/694899.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号