参考链接: 在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表的顺序从小到大相关推荐

  1. Java 将一个字符串进行反转。将字符串中指定部分进行反转,abcdefg; gfedcba

    1.Java 将一个字符串进行反转.将字符串中指定部分进行反转,"abcdefg";  gfedcba public class Demo20 { public static vo ...

  2. [转载] Java 中字符串转整型和整型转字符串

    参考链接: Java中的字符串到整数– parseInt() Java 中字符串转整型和整型转字符串 1.字符串转整型Java代码,字符串为纯数字的情况下,调用Integer的静态方法parseInt ...

  3. swift和java_Swift和Java关于字符串和字符的比较

    1. 字符串字面量 Swift和Java关于字符串操作大同小异. Swift:字符串字面量(String Literals):我们可以在代码中包含一段预定义的字符串值作为字符串字面量. 字符串字面量是 ...

  4. java 统计字符串中字符个数_java实现统计字符串中字符及子字符串个数的方法示例...

    本文实例讲述了java实现统计字符串中字符及子字符串个数的方法.分享给大家供大家参考,具体如下: 这里用java实现统计字符串中的字符(包括数字.大写字母.小写字母以及其他字符)个数,以及字符串的子字 ...

  5. [转载] java中对数组进行排序_如何在Java中对数组排序

    参考链接: Java中main()的有效变体 java中对数组进行排序 Java Array is like a container that can hold a fixed number of t ...

  6. java字符排序_如何按字母顺序对字符串进行排序java

    如果先将字符放入数组中,则可以使用Arrays.sort执行此操作. (它必须是Character对象的数组而不是char基元,以便使用自定义的不区分大小写的比较器.) // put the char ...

  7. Java 将字符串转换为字符数组 toCharArray()

    Java 手册 toCharArray public char[] toCharArray() 将此字符串转换为一个新的字符数组. 返回: 一个新分配的字符数组,它的长度是此字符串的长度,它的内容被初 ...

  8. java计算字符串中字符出现的次数_java – 计算字符串中字符出现次数

    参见英文答案 > Java compressing Strings                                    18个 我正在尝试编写一个Java程序,它接受一个字符串 ...

  9. [转载] Java 将字符串首字母转为大写 - 利用ASCII码偏移

    参考链接: 使用ASCII值检查Java中的字符串是否仅包含字母 将字符串name 转化为首字母大写.普遍的做法是用subString()取第一个字母转成大写再与之后的拼接: str = str.su ...

最新文章

  1. 虚拟目录和应用程序的区别
  2. it has a DefiningQuery and no InsertFunction element exists in the ModificationFunctionMapping e...
  3. GPass:GNOME 暗码治理器
  4. jmeter(一)安装教程
  5. leetcode585. 2016年的投资(SQL)
  6. linux命令提示符不同,Linux命令提示符如何按照自己的习惯修改?
  7. MobileIron Access保障移动设备的企业云数据安全
  8. raid5 合适 多少块硬盘_分析Linux raid6同步成raid5导致数据丢失的情况
  9. 二叉树的存储方式以及递归和非递归的三种遍历方式
  10. 解决docker下载安装速度慢的问题
  11. 88.合并两个有序数组
  12. 面对疫情,大学生如何保持良好的心理状态
  13. 天地不仁,以万物为刍狗!
  14. win10 华硕ASUS USB AC56 无线网卡 欧版 5G 信号不全 问题修复
  15. 【深度学习】梯度消失与梯度爆炸的原因分析与解决策略
  16. 干货!量子技术入门、进阶、行业专家观点、最新资讯!1000篇好文帮你揭开量子技术神秘面纱!...
  17. 计讯物联防潮产品,无惧恶劣环境
  18. Innodb中的事务隔离级别和锁的关系
  19. python简单计算器综合实验报告_python之简单计算器
  20. C语言的指针符号到底靠近变量类型还是变量名?

热门文章

  1. Java基础总结之(面试)
  2. Nginx配置以及域名转发
  3. (十一)linux之poll轮询
  4. c++ socket线程池_java 网络编程,Socket编程
  5. internetreadfile读取数据长度为0_YOLOV3的TensorFlow2.0实现,支持在自己的数据集上训练...
  6. mysql中的生日应该是什么类型_MySQL中的定点数类型
  7. php显示json,PHP解决JSON中文显示问题
  8. mysql修改表的字段_mysql修改表字段学习笔记
  9. 神经网络的全连接层_深度神经网络全连接层
  10. IntelliJ IDEA自动生成自定义的类注释和方法注释