首页 > 解决方案 > Java中char数组的选择排序

问题描述

尝试通过将字符串转换为 char 数组来对字符串进行选择排序,这对我来说似乎是正确的,但它并没有完全对数组进行排序并返回一个半排序的数组。

public class Anagram {
    public static void main(String[] args) {
        String str1 = "ksdvbjksbjdjkk";
        int minInd,
        min,
        currChar;
        char temp;
        char str1arr[] = str1.toCharArray();

        for (int i = 0; i < str1arr.length; i++) {
            minInd = i;
            min = str1.charAt(i);
            for (int j = i; j < str1arr.length; j++) {
                currChar = str1.charAt(j);
                if (currChar < min) {
                    minInd = j;
                }
            }
            temp = str1arr[minInd];
            str1arr[minInd] = str1arr[i];
            str1arr[i] = temp;
        }
        for (char e: str1arr) System.out.print(e);
    }
}

输出:

jkbsbdkvdjjkks

标签: javachar

解决方案


错误在于算法的逻辑。这里应该是这样的:

  1. 在数组上从 arr[1] 迭代到 arr[n]。
  2. 将当前元素(键)与其前身进行比较。
  3. 如果关键元素小于其前任元素,请将其与之前的元素进行比较。将较大的元素向上移动一位,为交换的元素腾出空间。

你的前两步是正确的,但对于第三步(嵌套循环),你应该朝相反的方向走,如果元素大于键,则用你的键交换元素。

你可以参考这篇文章,它有更好的解释:https ://www.geeksforgeeks.org/insertion-sort/ 算法的逻辑取自这篇文章。


推荐阅读