java - 按降序/升序对数组中的字符串数据进行冒泡排序

标签 java arrays sorting bubble-sort

我在对数组中的字符串进行排序时遇到了麻烦。

我应该从我的代码中获得两个不同的输出,但我只按升序获得输出。

    import java.util.*;
public class nextLineArray1
{
    public static void main(String[] args)
    {
        Scanner input = new Scanner(System.in);
        String names[]=new String[12];
        System.out.println("Enter the 12 names: ");
        //Load Array
        for(int i = 0; i < 12; i++)
        {
            names[i] = input.nextLine();

        }

        //Print descending order list
        String[] descSort;
        descSort=bubbleSortDesc(names);
        System.out.println("Names listed sorted in descending order (via BubbleSort): ");
        for(int x=0; x < names.length; x++)
        {
            System.out.println(names[x]);
        }
        //Print ascending order list
        String[] ascSort;
        ascSort=bubbleSortAsc(names);
        System.out.println("Names listed sorted in ascending order (via BubbleSort): ");
        for(int z=0; z < names.length; z++)
        {
            System.out.println(names[z]);
        }
    }
    public static String[] bubbleSortDesc(String[] names)
    {
        String temp;
        int passNum, i, result;
        for(passNum=1; passNum <= 11; passNum++)
        {
            for(i = 0; i<=(11-passNum); i++)
            {
                result=names[i].compareToIgnoreCase(names[i+1]);
                if(result>0)
                {
                    temp=names[i];
                    names[i]=names[i+1];
                    names[i+1]=temp;
                }
            }
        }
        return names;

    }

    public static String[] bubbleSortAsc(String[] names)
    {
        String temp;
        int passNum, i, result;
        for(passNum=1; passNum <= 11; passNum++)
        {
            for(i = 0; i<=(11-passNum); i++)
            {
                result=names[i].compareToIgnoreCase(names[i]);
                if(result>0)
                {
                    temp=names[i-1];
                    names[i-1]=names[i];
                    names[i]=temp;
                }
            }
        }
        return names;
    }
}

解释为什么它只按升序排序,会很有帮助。

提前致谢。

最佳答案

在我看来,bubbleSortDesc 正在按升序排序,而 BubbleSortAsc 根本不起作用:

            //In BubbleSortAsc
            result=names[i].compareToIgnoreCase(names[i]);
            //result == 0, since names[i] is definitely equal to names[i]
            if(result>0)
            {
                //Never reached
                temp=names[i-1];
                names[i-1]=names[i];
                names[i]=temp;
            }

所以,您应该再次在 BubbleSortAsc 中:

            result=names[i].compareToIgnoreCase(names[i+1]);
            if(result>0) //names[i] > names[i+1], so swap them.

在 BubbleSortDesc 中:

            result=names[i].compareToIgnoreCase(names[i+1]);
            if(result<0) // This was backwards.  If names[i] < names[i+1], you need to swap, for descending order.

关于java - 按降序/升序对数组中的字符串数据进行冒泡排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22771981/

相关文章:

java - 从 Hbase Get 中检索除特定列名之外的所有列

java - Spring Security 3.2、CSRF 和多部分请求

php - 如何成功地将每个循环的所有值发布到 mysql 数据库

java - 使用 Collections.sort() 时,它排序并打印哈希码

python - 检索根据 Redis 排序集排序的 Django 查询集的最有效方法

java - Solrcloud Zookeper 设置 : No registered leader was found after waiting for 4000ms , 集合:c1 切片:shard2

java - Playframework 2.4.3 迁移到 2.7.0 时出现的问题

java从字符串: org. json.JSONException创建JSONArray:错误字符 ':'

java - 如何将 Vector 转换为 JSONArray?

c# - 在处理 C# Outlook 之前按接收时间对电子邮件进行排序