【问题标题】:sorting a string using selection sort alg使用选择排序算法对字符串进行排序
【发布时间】:2012-12-14 00:17:01
【问题描述】:

我知道有一种简单的方法可以做到这一点...话虽如此,我正在尝试使用选择排序和 stringBuilder 类对字符串进行排序,但我得到了一个无限循环。如果有人可以提供帮助,不胜感激。 包 Chapter9Str; 导入 java.util.*;

public class SortedString {

    public static void main(String[] args) {
        String input = "cabed";

        System.out.println(sort(input));
    }

    public static String sort(String str) {     
        StringBuilder sb = new StringBuilder(str);

        for(int i=0; i<sb.length()-1; i++) {
            char tmp;
            for(int j=i+1; j<sb.length(); j++) {
                if(sb.charAt(j) < sb.charAt(i)) {
                    tmp = sb.charAt(i);
                    sb.insert(i, sb.charAt(j));
                    sb.insert(j,  tmp);
                }
            }
        }
        return sb.toString();       

    }

}

【问题讨论】:

  • 您每次在循环中都在字符串中插入两个字符 - 我怀疑这就是您的意图。您不应该同时删除两个或替换它们吗?
  • 顺便说一句-这不是selection sort这是bubble sort
  • @OldCurmudgeon 不,不是。交换比它需要的更频繁(最低值可以在 tmp 中跟踪,然后在内部循环结束时交换),但是通过内部循环,i 是静态的,并且在每次迭代结束时外循环,保证再多一个值是有序的,从最小到最大。
  • @femtoRgon - 我显然不值得。 :) 对我来说,这看起来像是 BS。

标签: java string sorting


【解决方案1】:

每次交换,实际上都是在增加字符串的长度。

            if(sb.charAt(j) < sb.charAt(i)) {
                tmp = sb.charAt(i);
                sb.insert(i, sb.charAt(j));
                sb.insert(j,  tmp);
            }

Insert 在指定位置腾出空间,而不是替换那里的字符。例如,如果你从acbd 开始,在你点击那段代码之后,你会得到abccbd,而不是abcd

我认为您正在寻找的是setCharAt 方法。

【讨论】:

    猜你喜欢
    • 2021-03-17
    • 1970-01-01
    • 2018-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 2021-11-02
    相关资源
    最近更新 更多