【问题标题】:Java - my alphabetical order sorting algorithm not always working as expectedJava - 我的字母顺序排序算法并不总是按预期工作
【发布时间】:2019-03-08 17:10:47
【问题描述】:

这是我的 java 代码。 (最后说明)

import java.util.Scanner;
import java.util.Arrays;
/**
 *
 * @author Laksh
 */
public class Sort4 {
    public static void Swap(int[] array,int Swap1,int Swap2){
        int temporarySwapper;
        temporarySwapper=array[Swap1];
        array[Swap1]=array[Swap2];
        array[Swap2]=temporarySwapper;
    }
    public static void Swap(String[] array,int Swap1,int Swap2){
        String temporarySwapper;
        temporarySwapper=array[Swap1];
        array[Swap1]=array[Swap2];
        array[Swap2]=temporarySwapper;
    }
    public static String[] alphasort(String[] original, int level, int start, int end ){
        int swaps;
        int[] array=new int[original.length];
        for(int i=0;i<original.length;i++){
            array[i]=(int)original[i].charAt(level);
        }
        do{
            swaps=0;
            for(int i=start;i<end;i++){
                if(array[i]>array[i+1]){
                    Swap(original,i,i+1);
                    Swap(array,i,i+1);
                    swaps++;
                }
            }
        }while(swaps != 0);
        return Arrays.copyOfRange(original, start, end+1);
    }
    public static String repeat(String s,int times){
        String returnString="";
        for(int i=0;i<times;i++){
            returnString+=s;
        }
        return returnString;
    }

        public static void main(String[] args) {
        Scanner input=new Scanner(System.in);        
        System.out.println("Enter 5 Names:");
        int max=Integer.MIN_VALUE;
        String[] name=new String[5];
        for(int i=0;i<5;i++){
            name[i]=input.next();
            if(name[i].length()>max){
                max=name[i].length();
            }
        }
        for(int i=0;i<5;i++){
            if(name[i].length()<max){
                name[i]=name[i]+repeat(" ",max-name[i].length());
            }
        }

        String[] sorted=alphasort(name,0,0,name.length-1);
        for(String c:sorted){
            System.out.println(c);
        }

    }

}

为了澄清我面临的问题,我的代码依赖于查找 char 的 ascii 整数值,然后对整数数组进行排序。如果我要尝试的字符串的第一个字母等于另一个字符串的第一个字母,则代码将移至第二个字母,依此类推。为了避免字符串索引越界,我使用“重复”方法在每个字符串的末尾添加足够的空格,以使它们的长度都相同——因为相同长度的字符串会阻止这种情况。我面临的问题是它排序正确,但在某些地方,它失败了。

例如,如果我传入“butter”和“butterfly”,这两个值将按照输入的顺序输出,相对于其他正确排序的值! 例如:

butter
cookie
butterfly
cookiemonster
ninja

排序

butter       
butterfly    
cookie       
cookiemonster
ninja  

而

butterfly
cookie
butter
cookiemonster
ninja

排序

butterfly       
butter    
cookie       
cookiemonster
ninja

帮帮我,因为我找不到我的错误。

【问题讨论】:

  • 没有错误。您发布的输出显示两个输入都正确排序到相同的输出,黄油在蝴蝶之前。
  • 你能解释一下输出(排序列表)有什么问题吗?
  • 哦,对不起。我错误地粘贴了输出。它已经过编辑,所以现在您可以看到第二个输出的问题(第一个实际上是正确的)
  • 你为什么不使用TreeSet&lt;String&gt;()或RadixSort或Arrays.sort(original)?
  • 我猜是作业还是练习?

标签: java arrays algorithm sorting alphabetical-sort


【解决方案1】:

您只比较了每个单词的首字母,单词的顺序,butterfly 和 butter,没有改变。

你必须用下面的函数比较每个单词的每个字母:

  int size = myArray.length;

  for(int i = 0; i<size-1; i++) {
     for (int j = i+1; j<myArray.length; j++) {
        if(myArray[i].compareTo(myArray[j])>0) {
           String temp = myArray[i];
           myArray[i] = myArray[j];
           myArray[j] = temp;
        }
     }

【讨论】:

    猜你喜欢
    • 2015-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-27
    • 1970-01-01
    • 2014-12-21
    • 2023-03-25
    相关资源
    最近更新 更多