对字符串中字符进行自然顺序排序(基本类型排序)-冒泡算法实现

字符串本质就是字符数组,所以对字符串的排序也就是对字符数组的排序(有选择排序、冒泡排序、快速排序等常用算法);

  • 思路:

    • 字符串转换成字符数组
    • 数组排序
      • 用的冒泡排序,

        • 注意点:
          1. 一层循环下来会将最小的元素转移到末尾,即最小的元素与其他元素都进行了一次比较,所以还需要外层循环控制交换次数(length-1);
          而不是所有的元素大小,所以还需要外层嵌套
          2. 十进制ASCII码,对应的字母位越小,十进制数越大,与自然位相驳;
    • 字符数组转换成字符串

例题加详细的注释:

@Test
public void Sorting(){
    String str = "dkgkfjg";
//1、字符串转换成字符串数组
    char[] ch = str.toCharArray();

//2、对数组进行排序
    //方式一:调用静态方法Arrays.sort()
    //Arrays.sort(ch);

    /*方式二:冒泡排序:
    * */
    //外层循环:控制要交换的轮数,最多要交换length-1次
    for (int j = 0; j < ch.length-1; j++) {
        //创建一个开关,且每次循环开始都打开开关
        boolean loopFlag = true;

        //内层循环:对前后两个数进行比较、交换
        for (int i = 0; i < ch.length - 1 - i; i++) {//-i是已经交换了的元素
            if(ch[i] > ch[i+1]){//这样比较的时其对应的十进制ASCII码,对应的字母位越小,十进制数越大,所以反着来
                char c = ch[i];
                ch[i] = ch[i+1];
                ch[i+1] = c;
                //只要本层循环发生过交换,说明还没有比较完,关闭开关
                loopFlag = false;
            }
            //如全部比较完成,无需等待循环条件满足再跳出外层循环,提高了运行效率
            if(loopFlag){
                break;
            }
        }
    }
//3、将排序后的数组转换成字符串
    String strSort = String.valueOf(ch);
    System.out.println("转换后的数组:"+strSort);
}

原文地址:https://www.cnblogs.com/csyh/p/12273757.html

时间: 2024-10-08 10:38:44

对字符串中字符进行自然顺序排序(基本类型排序)-冒泡算法实现的相关文章

C语言:将s所指字符串中下标为偶数同时ASCII值为奇数的字符删去,-将a所指字符串中的字符和b所指字符串中的字符的顺序交叉,-将形参s所指字符串中的所有数字字符顺序前移,

//函数fun功能:将s所指字符串中下标为偶数同时ASCII值为奇数的字符删去,s所指串中剩余的字符形成的新串放在t所指的数组中. 1 #include <stdio.h> 2 #include <string.h> 3 4 void fun(char *s, char t[]) 5 { 6 int i=0,j=0; 7 while (s[i] != '\0') 8 { 9 if (i % 2 == 0) 10 { 11 if ((int)(s[i]) % 2 == 1)//判断A

将字符串中的每个单词顺序进行颠倒,单词还是原来的单词,字母顺序不发生变化

/*测试数据:Shen zhen is a beautiful city!*/ /*运行结果:city! beautiful a is zhen Shen*/ #include<stdio.h> #define SIZE 1000 void reverse(char *low,char *high)/*接受两个指针,将指针中间的内容倒置*/ { while (low < high){ *low = *low^*high; *high = *low^*high; *low = *low^*

技巧之C#统计字符串中字符出现的次数(转)

方法1.自定义类 class CharNum { private char c; private int num; public char C { get { return c; } } public int Num { get { return num; } set { num = value; } } public CharNum(char ch) { this.c = ch; this.num = 1; } } static void Main(string[] args) { /* */

字符串中字符的个数和字符序列

题目 输出上次字符串中字符的个数和字符 最终的序列如下: 1, 11, 21, 1211, 111221, ... n=1时,输出字符串"1" n=2时,输出上次字符串中字符的个数和字符,因为上次字符串有1个1,所以输出11 n=3时,由于上次字符是11,有2个1,所以输出21 n=4时,由于上次字符串是21,有1个2和1个1,所以输出1211 依次类推,写个countAndSay(n)函数返回字符串. 参考代码 class Solution { public: string getN

java统计字符串中字符及子字符串个数

import java.util.Scanner;public class Counter { static Scanner scanner = new Scanner(System.in); public static void count(String s) { int low, upper, num, others; low = upper = num = others = 0; for (int i = 0; i < s.length(); i++) { if (Character.is

打印给定字符串中字符的所有排列

题目: 输入一个字符串,打印出该字符串中字符的所有排列.例如输入字符串abc,则输出由字符a.b.c所能排列出来的所有字符串abc.acb.bac.bca.cab和cba. 解决: 简单起见,字符串中没有相同的字符. 其实这是个递归的过程:对于字符串str,先分别逮住其中的每一个,如s,把它从str中踢开,成了 s + tr(下一次踢开t变为 t + sr),然后对于剩下来的,再从剩下的再次分别踢开一个加到左边的后面(假想被踢开的都在左边,剩下的都在右边哈),一直如此,直至右边都踢光了.算法如下

CareerCup之1.1字符串中字符判重

[题目] Chapter 1 | Arrays and Strings 原文: 1.1 Implement an algorithm to determine if a string has all unique characters. What if you can not use additional data structures? 译文: 实现一个算法来判断一个字符串中的字符是否唯一(即没有重复).不能使用额外的数据结构. (即只使用基本的数据结构) [分析] [思路一]首先,我们要搞清

C#判断字符串是否存在字母及字符串中字符的替换实例

本文实例讲述了C#判断字符串是否存在字母及字符串中字符的替换的方法.分享给大家供大家参考.具体实现方法如下: 首先要添加对命名空间"using System.Text.RegularExpressions;"的引用 下面以一个字符串为例: 代码如下: string ss = "aaZ31 dd2f3"; string sss = ss.Replace(" ", "");//将字符串ss中的空格去掉 string sss2 =

java怎么实现统计一个字符串中字符出现的次数

问题:假设字符串仅仅保护a-z 的字母,java怎么实现统计一个字符串中字符出现的次数?而且,如果压缩后的字符数不小于原始字符数,则返回. 处理逻辑:首先拆分字符串,以拆分出的字符为key,以字符出现次数为value,存入Map中. 源码如下: 1 import java.util.HashMap; 2 import java.util.Iterator; 3 import java.util.Map; 4 5 public class TestCompress { 6 7 public sta