在JAVA中
1.对YNNU+姓名全拼(声母大写,韵母小写)进行排序;
2.每次变更字母位置都输出所有字母顺序,位置提前的字母用加号(+)前后包围,位置置后的字母用减号(-)前后包围;
3.遇到姓的拼音首字母移动,行末显示姓的中文,遇到名字拼音首字母移动,行末显示名字的中文;
4.如果上述两个字母都移动则行末分别显示姓和名;
5. 输出显示总共执行了多少次字母对调;
6. 最后显示排序开始时间和结束时间以及所用时长;
JAVA中的字母排序
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
7条回答 默认 最新
关注 引自免费微信小程序:皆我百晓生
为了实现这个功能,你需要创建一个Java类,包含排序算法、字符处理逻辑以及时间测量的部分。下面是一个基本的示例代码,它实现了所需的功能。请注意,这个代码没有包含输入数据的具体获取,你可能需要根据实际场景调整这部分。
import java.time.Duration; import java.time.LocalDateTime; import java.util.ArrayList; import java.util.Arrays; import java.util.Comparator; import java.util.List; public class NameSorter { private static final String NAME = "YNNU张三李四"; private static final char[] NAME_SPLIT = {'Y', 'N', 'N', 'U'}; public static void main(String[] args) { LocalDateTime startTime = LocalDateTime.now(); List<Character> characters = sortName(NAME); LocalDateTime endTime = LocalDateTime.now(); System.out.println("排序后的结果: " + characters.stream().mapToObj(c -> c == '+' || c == '-' ? c : Character.toString(c)).collect(Collectors.joining())); System.out.println("总共执行了" + characters.stream().filter(c -> c == '+' || c == '-').count() + "次字母对调"); System.out.println("排序开始时间: " + startTime); System.out.println("排序结束时间: " + endTime); System.out.println("所用时长: " + Duration.between(startTime, endTime)); } private static List<Character> sortName(String name) { char[] nameChars = name.toCharArray(); int n = nameChars.length; List<Character> operations = new ArrayList<>(); for (int i = 0; i < n - 1; i++) { for (int j = i + 1; j < n; j++) { if (compare(nameChars[i], nameChars[j]) > 0) { swap(nameChars, i, j); recordOperation(operations, nameChars, i, j); } } } return operations; } private static int compare(char a, char b) { for (char splitChar : NAME_SPLIT) { if (a == splitChar && b != splitChar) { return 1; } else if (b == splitChar && a != splitChar) { return -1; } } return Character.compare(a, b); } private static void swap(char[] chars, int i, int j) { char temp = chars[i]; chars[i] = chars[j]; chars[j] = temp; } private static void recordOperation(List<Character> operations, char[] chars, int i, int j) { if (i < NAME_SPLIT.length) { operations.add('+'); } else if (j < NAME_SPLIT.length) { operations.add('-'); } else { operations.add('+'); operations.add('-'); } } }
这段代码首先定义了一个
NameSorter
类,并在main
方法中启动排序过程。sortName
方法实现了冒泡排序算法,同时记录每一次交换操作。compare
方法用于比较两个字符的顺序,swap
方法用于交换数组中的元素,而recordOperation
方法用于记录字母对调的操作。注意:这个例子使用了简单的冒泡排序算法,对于大规模的数据,可能会有性能瓶颈。在实际应用中,你可能需要选择更高效的排序算法,例如快速排序或归并排序。
运行此程序将输出排序后的结果、执行的字母对调次数、排序开始和结束时间以及所用时长。如果你需要从用户输入或其他地方获取字符串,可以适当修改
NAME
变量和sortName
方法的参数。解决 无用评论 打赏 举报 编辑记录
悬赏问题
- ¥50 comsol温度场仿真无法模拟微米级激光光斑
- ¥15 上传图片时提交的存储类型
- ¥15 Ubuntu开机显示器只显示kernel,是没操作系统(相关搜索:显卡驱动)
- ¥15 VB.NET如何绘制倾斜的椭圆
- ¥15 在rhel8中安装qemu-kvm时遇到“cannot initialize crypto:unable to initialize gcrypt“报错”
- ¥15 arbotix没有/cmd_vel话题
- ¥20 找能定制Python脚本的
- ¥15 odoo17的分包重新供应路线如何设置?可从销售订单中实时直接触发采购订单或相关单据
- ¥15 用C语言怎么判断字符串的输入是否符合设定?
- ¥15 通信专业本科生论文选这两个哪个方向好研究呀