Java:不使用Arrays.sort()对整数数组进行排序

ran*_*n32 9 java arrays sorting int integer

这是我们Java类中的一个练习中的指令.在其他任何事情之前,我想说我'做我的功课'而且我不只是懒得让Stack Overflow上的某个人为我回答这个问题.这个特定项目是我所有其他练习中的问题,因为我一直在努力为此找到"完美的算法".

编写JAVA程序,输入10个整数值,并按升序或降序显示.注意:不允许使用Arrays.sort().

这是我提出的代码,它有效,但它有一个明显的缺陷.如果我输入两次或更多相同的值,例如:

5,5,5,4,6,7,3,2,8,10

输入的三个5中只有一个将被计算并包含在输出中.我得到的输出(升序)是:

2 3 4 5 0 0 6 7 8 10.

import java.util.Scanner;

public class Exer3AscDesc
{
    public static void main(String args[])
    {
        Scanner scan = new Scanner(System.in);
        int tenNums[]=new int[10], orderedNums[]=new int[10];
        int greater;
        String choice;

        //get input
        System.out.println("Enter 10 integers : ");
        for (int i=0;i<tenNums.length;i++)
        {
            System.out.print(i+1+"=> ");
            tenNums[i] = scan.nextInt();
        }
        System.out.println();

        //imperfect number ordering algorithm
        for(int indexL=0;indexL<tenNums.length;indexL++)
        {
            greater=0;
            for(int indexR=0;indexR<tenNums.length;indexR++)
            {
                if(tenNums[indexL]>tenNums[indexR])
                {
                    greater++;
                }
            }
            orderedNums[greater]=tenNums[indexL];
        }

        //ask if ascending or descending
        System.out.print("Display order :\nA - Ascending\nD - Descending\nEnter your choice : ");
        choice = scan.next();

        //output the numbers based on choice
        if(choice.equalsIgnoreCase("a"))
        {
            for(greater=0;greater<orderedNums.length;greater++)
            {
                System.out.print(orderedNums[greater]+" ");
            }
        }
        else if(choice.equalsIgnoreCase("d"))
        {
            for(greater=9;greater>-1;greater--)
            {
                System.out.print(orderedNums[greater]+" ");
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Yog*_*oga 22

简单排序算法冒泡排序:

public static void main(String[] args) {
    int[] arr = new int[] { 6, 8, 7, 4, 312, 78, 54, 9, 12, 100, 89, 74 };

    for (int i = 0; i < arr.length; i++) {
        for (int j = i + 1; j < arr.length; j++) {
            int tmp = 0;
            if (arr[i] > arr[j]) {
                tmp = arr[i];
                arr[i] = arr[j];
                arr[j] = tmp;
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


mhs*_*ams 5

您可以在互联网上找到许多不同的排序算法,但如果您想修复自己的解决方案,可以在代码中进行以下更改:

代替:

 orderedNums[greater]=tenNums[indexL];
Run Code Online (Sandbox Code Playgroud)

你需要这样做:

while (orderedNums[greater] == tenNums[indexL]) {
     greater++;
}
orderedNums[greater] = tenNums[indexL];
Run Code Online (Sandbox Code Playgroud)

此代码基本上检查该特定索引是否被类似的数字占用,然后它将尝试查找下一个空闲索引.

注意:由于排序数组元素中的默认值为0,因此您需要确保列表中没有0.否则,您需要使用您确定不在列表中的特殊号码启动已排序的数组,例如:Integer.MAX_VALUE