[转载] 【Java】将一个字符串的字符排序,按ASCII表的顺序从小到大
参考链接: 在Java中搜索字符串中的字符和子字符串
将一个字符串的字符按ASCII表的顺序从小到大排序,如将字符串“asdafxcvMADb”排序为“ADMaabcdfsvx”
算法的基本思想: 先将字符串转化为一个char类型的数组,来进行存储(因Java中的字符串并不像C++中那样直接使用数组存储)。 之后按照归并排序的方法,将char数组中的内容按从小到大排序。归并排序是一种稳定的排序算法,而且可以将算法的时间复杂度提高到O(nlgn)。
废话不多说,直接上代码:
public class Demo {
public static void main(String[] args){
Demo demo=new Demo();
String string="asdafxcvMADb";
demo.sortByASCII(string);
}
public void sortByASCII(String str){
char []array=str.toCharArray(); //将一个简单的字符串中的内容转化为char数组
sort(array);
for(char s:array) //输出
System.out.print(s);
}
public static void sort(char []arr){
char []temp = new char[arr.length]; //在排序前,先建好一个长度等于原数组长度的临时数组,避免递归中频繁开辟空间
sort(arr,0,arr.length-1,temp);
}
private static void sort(char[] arr,int left,int right,char []temp){
if(left<right){
int mid = (left+right)/2;
//递归的方法
sort(arr,left,mid,temp); //左边归并排序,使得左子序列有序
sort(arr,mid+1,right,temp);//右边归并排序,使得右子序列有序
merge(arr,left,mid,right,temp);//将两个有序子数组合并操作
}
}
private static void merge(char[] arr,int left,int mid,int right,char[] temp){
int i = left; //左序列指针
int j = mid+1; //右序列指针
int t = 0; //临时数组指针
while (i<=mid && j<=right){
if(arr[i]<=arr[j])
temp[t++] = arr[i++];
else
temp[t++] = arr[j++];
}
while(i<=mid){ //将左边剩余元素填充进temp中
temp[t++] = arr[i++];
}
while(j<=right){ //将右序列剩余元素填充进temp中
temp[t++] = arr[j++];
}
t = 0;
//将temp中的元素全部拷贝到原数组中
while(left <= right){
arr[left++] = temp[t++];
}
}
}
鉴于代码中的注释也比较清楚,这里也不多说。
[转载] 【Java】将一个字符串的字符排序,按ASCII表的顺序从小到大相关推荐
- Java 将一个字符串进行反转。将字符串中指定部分进行反转,abcdefg; gfedcba
1.Java 将一个字符串进行反转.将字符串中指定部分进行反转,"abcdefg"; gfedcba public class Demo20 { public static vo ...
- [转载] Java 中字符串转整型和整型转字符串
参考链接: Java中的字符串到整数– parseInt() Java 中字符串转整型和整型转字符串 1.字符串转整型Java代码,字符串为纯数字的情况下,调用Integer的静态方法parseInt ...
- swift和java_Swift和Java关于字符串和字符的比较
1. 字符串字面量 Swift和Java关于字符串操作大同小异. Swift:字符串字面量(String Literals):我们可以在代码中包含一段预定义的字符串值作为字符串字面量. 字符串字面量是 ...
- java 统计字符串中字符个数_java实现统计字符串中字符及子字符串个数的方法示例...
本文实例讲述了java实现统计字符串中字符及子字符串个数的方法.分享给大家供大家参考,具体如下: 这里用java实现统计字符串中的字符(包括数字.大写字母.小写字母以及其他字符)个数,以及字符串的子字 ...
- [转载] java中对数组进行排序_如何在Java中对数组排序
参考链接: Java中main()的有效变体 java中对数组进行排序 Java Array is like a container that can hold a fixed number of t ...
- java字符排序_如何按字母顺序对字符串进行排序java
如果先将字符放入数组中,则可以使用Arrays.sort执行此操作. (它必须是Character对象的数组而不是char基元,以便使用自定义的不区分大小写的比较器.) // put the char ...
- Java 将字符串转换为字符数组 toCharArray()
Java 手册 toCharArray public char[] toCharArray() 将此字符串转换为一个新的字符数组. 返回: 一个新分配的字符数组,它的长度是此字符串的长度,它的内容被初 ...
- java计算字符串中字符出现的次数_java – 计算字符串中字符出现次数
参见英文答案 > Java compressing Strings 18个 我正在尝试编写一个Java程序,它接受一个字符串 ...
- [转载] Java 将字符串首字母转为大写 - 利用ASCII码偏移
参考链接: 使用ASCII值检查Java中的字符串是否仅包含字母 将字符串name 转化为首字母大写.普遍的做法是用subString()取第一个字母转成大写再与之后的拼接: str = str.su ...
最新文章
- 虚拟目录和应用程序的区别
- it has a DefiningQuery and no InsertFunction element exists in the ModificationFunctionMapping e...
- GPass:GNOME 暗码治理器
- jmeter(一)安装教程
- leetcode585. 2016年的投资(SQL)
- linux命令提示符不同,Linux命令提示符如何按照自己的习惯修改?
- MobileIron Access保障移动设备的企业云数据安全
- raid5 合适 多少块硬盘_分析Linux raid6同步成raid5导致数据丢失的情况
- 二叉树的存储方式以及递归和非递归的三种遍历方式
- 解决docker下载安装速度慢的问题
- 88.合并两个有序数组
- 面对疫情,大学生如何保持良好的心理状态
- 天地不仁,以万物为刍狗!
- win10 华硕ASUS USB AC56 无线网卡 欧版 5G 信号不全 问题修复
- 【深度学习】梯度消失与梯度爆炸的原因分析与解决策略
- 干货!量子技术入门、进阶、行业专家观点、最新资讯!1000篇好文帮你揭开量子技术神秘面纱!...
- 计讯物联防潮产品,无惧恶劣环境
- Innodb中的事务隔离级别和锁的关系
- python简单计算器综合实验报告_python之简单计算器
- C语言的指针符号到底靠近变量类型还是变量名?
热门文章
- Java基础总结之(面试)
- Nginx配置以及域名转发
- (十一)linux之poll轮询
- c++ socket线程池_java 网络编程,Socket编程
- internetreadfile读取数据长度为0_YOLOV3的TensorFlow2.0实现,支持在自己的数据集上训练...
- mysql中的生日应该是什么类型_MySQL中的定点数类型
- php显示json,PHP解决JSON中文显示问题
- mysql修改表的字段_mysql修改表字段学习笔记
- 神经网络的全连接层_深度神经网络全连接层
- IntelliJ IDEA自动生成自定义的类注释和方法注释