java - 将随机数组列表从最大到最小排序

标签 java arrays sorting

好吧,对于我的作业,我必须按从最大到最小的顺序对一系列随机数进行排序。 随机数来自indexOfMaxInRange,取最大数的索引返回该值。在swapElements中,它基本上必须将最高元素的索引交换到a[0],第二高的元素交换到a[1],依此类推。这两个方法都是通过sortarray来传递的。 请给我一些关于如何完成此操作以及我做错了什么的意见,谢谢。 PS:由于打印等各种原因,并非所有内容都在代码中调用。

这是我的代码:

public static void main(String[] args) {

    int[] array = randomIntArray (10);   
    int index = indexOfMaxInRange (array, -5, 15 );
    swapElement (array, index, 0);

}

  public static int randomInt (int low, int high){ // Create a serie of random numbers
    int x = 0;
    for (int i = 0; i < 10; i++){
        x = (int)(Math.random ()* (high - low) +low);

    }  
    return x;

}
public static int[] randomIntArray (int n) { // Size of array
    int[] a = new int [n];
    for (int i = 0; i <a.length; i++){
        a[i] = randomInt (-5, 15);
    }
    return a;
}

public static int indexOfMaxInRange (int[] a, int low , int high){ //Find the index of the largest element
    int [] b = new int [a.length];
    int index = 0;
    for (int i = 0; i < a.length-1; i++){
        if (a[i] >= low && a[i] < high)index++;  
        if (a[i] > a[i+1]){ 
            b[i] = a[i]; 


        }
        System.out.println (b[i]+"\t"+ (index));
    }  
    return index ;

}
public static int swapElement (int []a, int index , int i){ // Swap the element within the array
    int temp = 0;
    System.out.println ();
    for ( i = 0; i <a.length; i++){
        temp = index;
        a[i] = a[a.length - i - 1]; 
        temp = a[a.length - i - 1]; 


        System.out.println (temp + "\t"+ index);
   } 
    return temp;
}

public static void sortArray (int[] array){ 

    for (int i = 0; i <array.length; i++){    
    int index = indexOfMaxInRange (array, -5, 15 );
    swapElement (array, index, 0);

        System.out.println (); // This will print out the newly arranged order of the numbers.
    }
}

最佳答案

public class SortArray {
    public static void main(String[] args) {
        int[] unsortedArray = getRandomArray(10, -5, 15);
        printArray("Unsorted Array:", unsortedArray);
        System.out.println("Max element is at index: "+getMaxElementIndex(unsortedArray));
        printArray("Sorted Array in descending order:", sortArray("desc", unsortedArray));
        printArray("Sorted Array in asending order:", sortArray("asc", unsortedArray));
    }

    public static int[] getRandomArray(int length, int min, int max) {
        if(length == 0)
            throw new RuntimeException("Cannot create a zero length array.");
        int[] toReturn = new int[length];

        for(int i = 0; i < length; i++) {
            toReturn[i] = getRandomNumber(min, max, toReturn);
        }
        return toReturn;
    }

    public static int getRandomNumber(int min, int max, int[] array) {  
        int toReturn = (int)(Math.random ()* (max - min) +min);
        for(int i = 0; i<array.length;i++)
        {
            //Avoid duplicates and recurse if the number is already found in the array.
            if(toReturn == array[i])
                toReturn = getRandomNumber(min, max, array);
        }
        return toReturn;
    }

    public static void printArray(String label, int[] array) {
        System.out.println(label);
        for(int i=0;i<array.length;i++)
            System.out.print(array[i]+" ");
        System.out.println();
    }

    public static int getMaxElementIndex(int[] array) {
        int maxNum = -9999999;
        int index = -9999999;
        for(int i=0;i<array.length;i++)
        {
            if(maxNum == -9999999 || array[i] >= maxNum) {
                maxNum = array[i];
                index = i;
            }

            if(index == -9999999 && i == array.length - 1)
                index = i;
        }
        return index;
    }

    public static int[] sortArray(String direction, int[] array) {
        int temp = 0;
        if(direction.equalsIgnoreCase("desc") || direction.equalsIgnoreCase("")) {
            for(int i=0; i<array.length - 1; i++) {
                for(int j = i; j < array.length; j++) {
                    if(array[j] >= array[i]) {
                        temp = array[j];
                        array[j] = array[i];
                        array[i] = temp;
                    }
                }
            }
        } else if(direction.equalsIgnoreCase("asc")) {
            for(int i=0; i<array.length - 1; i++) {
                for(int j = i; j < array.length; j++) {
                    if(array[j] <= array[i]) {
                        temp = array[j];
                        array[j] = array[i];
                        array[i] = temp;
                    }
                }
            }
        }
        return array;
    }
}

关于java - 将随机数组列表从最大到最小排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16072201/

相关文章:

python - 如何在python中对字母数字集进行排序

c# - 以字节为单位的字典对象的大小

java - CodingBat 有错误 "StringIndexOutOfBoundsException"

java - 如何通过在 Java 中组合具有可变大小的整数数组来形成唯一的整数集?

ruby - 将键值对象数组转换为键值对象(ruby)

c - 二叉搜索树上的段错误 - 大排序

java - 如何以惰性方式连接java中的两个集合?

java - Java 中的默认访问说明符可以从类外部访问

检查正确的数组长度是否是 C 中的 malloc

PHP AJAX 排序数组无需重新加载页面