微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Java中字符数组的选择排序

如何解决Java中字符数组的选择排序

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

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

解决方法

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

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

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

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

,
public class Test {
    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 = str1arr[i];    // 1 mistake
            for (int j = i; j < str1arr.length; j++) {
                currChar = str1arr[j];    // 1 mistake
                if (currChar < min) {
                    minInd = j;
                    min = currChar;    // 2 mistake
                }
            }
            temp = str1arr[minInd];
            str1arr[minInd] = str1arr[i];
            str1arr[i] = temp;
        }

        for (char e : str1arr)
            System.out.print(e);
        System.out.println();
    }
}
  1. str1 始终不变;但 str1arr 每轮 for 循环都会改变;
  2. min 需要将最小字符从 i 更新为 j
,

试试这个代码。

public class SELSORT{
static void selectionSort(char a[],int n)
{
    for(int i = 0; i < n - 1; i++)
    {
        int min_index = i;
        char t1 = a[i];
        String mst= String.valueOf(t1);
        for(int j = i + 1; j < n; j++)
        {
            String t=String.valueOf(a[j]);
            if(t.compareTo(mst) < 0)
            {
                mst = String.valueOf(a[j]);
                min_index = j;
            }
        }

        if(min_index != i)
        {
            char temp = a[min_index];
            a[min_index] = a[i];
            a[i] = temp;
        }
    }
}

public static void main(String args[])
{
    String test="asdqwdfnshvbsudgfuyqsadbcsabcuwnbcsnm";
    char a[] = test.toCharArray();
    int n = a.length;
    System.out.println("Given array is");
    for(int i = 0; i < n; i++)
    {
        System.out.print(a[i]+" ");
    }
    System.out.println();
    selectionSort(a,n);
    System.out.println("Sorted array is");

    for(int i = 0; i < n; i++)
    {
        System.out.print(a[i]+" ");
    }
}

}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。