ALDS1_2_C:Stable Sort

2023-05-16

题目链接:ALDS1_2_C:Stable Sort

题目概要:

扑克牌中存在数字相同而花色不同的情况,该题需要利用扑克牌这一特性来比较两种排序:冒泡排序、选择排序(题中给出伪代码)的稳定性。在《挑战程序设计竞赛》中,书中给出的参考答案默认了冒泡排序是稳定的,显然该代码在比较任意两种排序算法时,无法得出客观结果,这里我给出一种能比骄傲任意排序算法稳定性的算法,在AOJ上能够AC。

代码思路:

该题所要解决的关键问题是,如何相同数字(Value)不同花色(Suit)的牌,在排序前后的相对位置是否改变,若改变则不稳定,不改变则稳定。显然用暴力循环来判断容易超出题目限制,我的方法是,构造一个新的数组first[],first[i]表示数字为i的牌第一次出现的花色,由初始牌组构造一个firstA[],排序后的牌组再次构造firstB[],最后比较两数组是否相同即可。

代码如下:

#include<stdio.h>
#include<iostream>
using namespace std;

char firstA[36], firstB[36], firstS[36];//初始化first数组:原始牌组、B种排序、S种排序

struct Card
{
	int value;
	char suit;
}A[100], S[100], B[100];//牌组数组

void check(char first[], Card C[], int n)//利用牌组数组生成first数组函数
{
	for (int i = 0; i < n; i++)
	{
		int value = C[i].value;
		if (first[value] == 0) first[value] = C[i].suit;
	}
}

void BubbleSort(int n, Card A[])//冒泡排序算法
{
	for (int i = 0; i < n; i++)
	{
		for(int j = n-1; j > i; j--)
			if (A[j].value < A[j - 1].value)
			{
				Card t = A[j];
				A[j] = A[j - 1];
				A[j - 1] = t;
			}
	}
}

void SelectionSort(int n, Card A[])//选择排序算法
{
	for (int i = 0; i < n; i++)
	{
		int minj = i;
		for (int j = i; j < n; j++)
		{
			if (A[j].value < A[minj].value) minj = j;
		}
		Card t = A[i];
		A[i] = A[minj];
		A[minj] = t;
	}
}

void Print(Card A[], int n)//输出牌组算法
{
	for (int i = 0; i < n; i++)
	{
		if (i) cout << ' ';
		cout << A[i].suit << A[i].value;
	}
	printf("\n");
}

int main()
{
	int n;
	cin >> n;
	for (int i = 0; i < n; i++)//读入牌组
	{
		char s[5] = {};
		cin >> s;
		A[i].suit = s[0];
		A[i].value = s[1]-48;
	}
	copy(A, A+100, B);
	copy(A, A+100, S);
	BubbleSort(n, B);
	SelectionSort(n, S);
	check(firstA, A, n);//生成first数组
	check(firstB, B, n);
	check(firstS, S, n);
	int flagB = 1, flagS = 1;//是否稳定标识符
	for (int i = 0; i < n; i++)
	{
		if(flagB)
			if (firstB[i] != firstA[i]) flagB = 0;
		if (flagS)
			if (firstS[i] != firstA[i]) flagS = 0;
	}
	Print(B, n);
	if (flagB) cout << "Stable" << endl;
	else cout << "Not stable" << endl;
	Print(S, n);
	if (flagS) cout << "Stable" << endl;
	else cout << "Not stable" << endl;
	return 0;
}

代码很烂,还有很多可以改进的地方,欢迎讨论!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ALDS1_2_C:Stable Sort 的相关文章

随机推荐

  • 计算ip地址是否在同一网段

    一 要判断两个IP地址是不是在同一个网段 xff0c 就将它们的IP地址分别与子网掩码做与运算 xff0c 得到的结果 gt 网络号 xff0c 如果网络号相同 xff0c 就在同一子网 xff0c 否则 xff0c 不在同一子网 例 xf
  • 面试官再问你 HashMap 底层原理,就把这篇文章甩给他看

    前言 HashMap 源码和底层原理在现在面试中是必问的 因此 xff0c 我们非常有必要搞清楚它的底层实现和思想 xff0c 才能在面试中对答如流 xff0c 跟面试官大战三百回合 文章较长 xff0c 介绍了很多原理性的问题 xff0c
  • Java核心技术读书笔记——集合

    本笔记为读 Java核心技术 卷1 第9版 而记录 目录 1 集合接口与实现相互分离1 1Java类库中集合接口和迭代器接口1 2泛型实用方法 2 具体的集合2 1链表2 2数组列表2 3散列表2 4树集2 5对象的比较2 6队列与双端队列
  • #每天一篇论文#(213/365) Joint 2D-3D-Semantic Data for Indoor Scene Understanding 结合2D-3D室内语义数据场景理解

    Joint 2D 3D Semantic Data for Indoor Scene Understanding http 3Dsemantics stanford edu A 摘要 本文提供了一个大型室内空间的数据集 xff0c 它提供了
  • 我心中的AI

    首先说一下我的身份 xff0c 一个刚刚踏入IT行业的年轻小伙 xff0c 相信在坐的大家心中都会有一个小小的梦想 拥有一个 大黄蜂 xff0c 这是我从事这个职业的原因所在 人工智能从诞生以来 xff0c 理论和技术日益成熟 xff0c
  • 2021-09-04 **mininet+flowvisor+floodlight实现网络切片功能**

    mininet 43 flowvisor 43 floodlight实现网络切片功能 这个项目所使用的软件flowvisor 和floodlight 都已经过时了网上能找到的资料太少了 xff0c 整个项目搭建过程中遇到的坑太多了 花了大量
  • CentOS 6.5 时间同步

    1 检查是否安装ntpdate rpm qa grep ntp 有返回说明已经安装 xff0c 若无返回 xff0c 执行安装命令进行安装 2 安装ntpdate yum install y ntp ntpdate 3 修改时区 vi et
  • 在linux安装elasticsearch-7.6.2 所遇到的坑

    64 TOC在linux安装elasticsearch 7 6 2 所遇到的坑 问题描述 刚接触学习elasticsearch xff0c 在linux环境安装就遇到了一些问题 运行角色问题 elasticsearch不建议使用root账号
  • freeRTOS多任务启动流程和源码分析

    最近学习白问网韦东山老师在B站开源的freeRTOS课程 xff0c 网址 xff1a 韦东山直播公开课 xff1a RTOS实战项目之实现多任务系统 第1节 xff1a 裸机程序框架和缺陷 哔哩哔哩 bilibili和7天物联网训练营 第
  • mkdir 创建目录命令

    mkdir命令 mkdir 命令简介 mkdir命令用来创建指定的名称的目录 xff0c 要求创建用户在当前目录权限 xff0c 并且制定的目录名不能是当前目录中已有的目录 命令格式 mkdir 选项 目录 命令参数 m mode 61 模
  • UCOS-II任务间通信(信号量、邮箱、消息队列)

    保护任务之间的共享数据和提供任务之间的通讯方法 xff1a 利用宏OS ENTER CRITICAL 和OS EXIT CRITICAL 来关闭和打开中断 xff0c 这可以用于多任务或者任务和ISR共享某些数据时可以采用这种方法 利用OS
  • 高考到程序员,从娇惯到耐艹

    现在的我刚好是走出校门没两天 xff0c 踏入it行业的程序员 此刻的心情 xff0c 有与挚友分别的不舍 xff0c 有悔恨当初的颓废 xff0c 还有一种提到望月的闯劲儿 总之心理活动错综复杂 xff0c 和高考那会儿玩世不恭的我大不相
  • AI浪潮下需要思考的事

    一 AI的意义 AI xff0c 即ArtificialIntelligence的缩写 xff0c 它是研究如何以人类的智能行为以及思考方式来解决问题的计算机科学的一个分支 目前主要研究的领域包括语音识别 图像识别 自然语言处理以及在某一特
  • Hive(二) -- ddl

    Hive支持标准SQL xff0c 同时又有自己的特点 xff0c 属于方言版SQL Hive的ddl主要包含对于数据库和表的查询 创建和删除 dml包含数据查询和插入 xff0c 其中插入有load和insert两种方式 xff0c 针对
  • autolisp的各种框(DCL)

    一 DCL是什么 前面的事情 xff0c 是通过在命令行输入参数来实现某个指令的 xff0c 而DCL是通过用户界面来实现交互的 下图就是一个典型的DCL 二 DCL怎么用 xff1f 首先说明 xff0c DCL不像lisp xff0c
  • 在hbase shell中过滤器的简单使用

    在hbase shell中查询数据 xff0c 可以在hbase shell中直接使用过滤器 xff1a span class hljs comment hbase shell span gt scan span class hljs st
  • kswapd0占用CPU过高问题处理

    项目场景 xff1a kswapd0占用CPU过高 xff0c 严重影响服务器及虚拟机的使用 问题描述 最近同事反应工作站上的虚拟机太慢了 到虚拟机上看了一下 xff0c 资料占得很满 xff0c 一点很长时间没反应 xff0c 卡得不行
  • QQ新版表情序号及对应

    在学习QQ机器人发送消息接口时遇到了新版表情发送问题 xff0c 以及QQ新版表情序号跟面板中不是完全对应的 xff0c 于是遍历了0 500号表情 xff0c 作一一输出 xff0c 得到了大部分表情的序号及对照如下 xff1a 表情使用
  • Java判断String字符串是否相等时容易出现的问题

    在程序设计中 xff0c 我们经常需要判断字符串是否相等 xff0c 如if a 61 61 b xff0c 但在java中 xff0c a和b两个字符串值相等 xff0c 但有时会判断出不相等的情况 例如 xff1a span class
  • ALDS1_2_C:Stable Sort

    题目链接 xff1a ALDS1 2 C Stable Sort 题目概要 xff1a 扑克牌中存在数字相同而花色不同的情况 xff0c 该题需要利用扑克牌这一特性来比较两种排序 xff1a 冒泡排序 选择排序 xff08 题中给出伪代码