【问题标题】:Sort elements of an array in ascending order按升序对数组元素进行排序
【发布时间】:2016-02-01 11:15:15
【问题描述】:

我正在尝试按升序对数组进行排序。由于某种原因,它只执行一次 for 循环。为什么直到所有东西都排序后才继续?

这是一个作业,所以我不能使用现有的排序方法。我应该自己写方法。

public class Sudoku {
    public static void main(String[] args) {
        int[] a = { 1, 4, 3, 5, 2 };
        System.out.println(Arrays.toString(sortArray(a)));
    }

    public static int[] sortArray(int[] nonSortedArray) {
        int[] sortedArray = new int[nonSortedArray.length];
        int temp;

        for (int i = 0; i < nonSortedArray.length - 1; i++) {
            if (nonSortedArray[i] > nonSortedArray[i + 1]) {
                temp = nonSortedArray[i];
                nonSortedArray[i] = nonSortedArray[i + 1];
                nonSortedArray[i + 1] = temp;
                sortedArray = nonSortedArray;
            }
        }

        return sortedArray;
    }
}

【问题讨论】:

  • "由于某种原因,它只执行一次 for 循环。" -- 您在程序中的哪个位置告诉它执行多次?该程序只会执行您告诉它执行的操作。

标签: java arrays sorting


【解决方案1】:
public static int[] sortArray(int[] nonSortedArray) {
        int[] sortedArray = new int[nonSortedArray.length];
        int temp;
        for (int j = 0; j < nonSortedArray.length - 1; j++) {// added this for loop, think about logic why do we have to add this to make it work

        for (int i = 0; i < nonSortedArray.length - 1; i++) {
            if (nonSortedArray[i] > nonSortedArray[i + 1]) {
                temp = nonSortedArray[i];
                nonSortedArray[i] = nonSortedArray[i + 1];
                nonSortedArray[i + 1] = temp;
                sortedArray = nonSortedArray;

            }
        }
        }
        return sortedArray;
    }

输出:[1, 2, 3, 4, 5]

//making use of j

public static int[] sortArray(int[] nonSortedArray){
    int[] sortedArray = new int[nonSortedArray.length];
    int temp;
    for (int i = 0; i <= nonSortedArray.length; i++) 
    {
        for (int j = i+1; j < nonSortedArray.length; j++)
        {
            if (nonSortedArray[i] > nonSortedArray[j]) 
            {
                temp = nonSortedArray[i];
                nonSortedArray[i] = nonSortedArray[j];
                nonSortedArray[j] = temp;
                sortedArray = nonSortedArray;
            }
        }
    }
    return sortedArray;
}

【讨论】:

    【解决方案2】:

    您正在尝试使用单个循环对数组进行排序。您将需要两个循环来确保元素按排序顺序。

    public static int[] sortArray(int[] nonSortedArray) 
    {
        int[] sortedArray = new int[nonSortedArray.length];
        int temp;
        for (int i = 0; i < nonSortedArray.length-1; i++) 
        {
            for (int j = i+1; j < nonSortedArray.length; j++)
            {
                if (nonSortedArray[i] > nonSortedArray[j]) 
                {
                    temp = nonSortedArray[i];
                    nonSortedArray[i] = nonSortedArray[j];
                    nonSortedArray[j] = temp;
                    sortedArray = nonSortedArray;
                }
            }
        }
        return sortedArray;
    }
    

    【讨论】:

      【解决方案3】:
       arr = new int[Item];
        Arrays.sort(arr);
      

      java中内置函数以升序对数组进行排序。

      【讨论】:

        【解决方案4】:

        这将按升序对数组进行排序

        int arr[]={33,3,4,5,1};
        Arrays.sort(arr);
        System.out.println(Arrays.toString (arr));
        

        输出将:-[1,3,4,5,33]

        【讨论】:

          【解决方案5】:

          按升序排列数组

          private static int[] sort(int[] array) {
                  int[] new_array = new int[array.length];
                  int count=0;
          
                  for (int i=0; i<array.length; i++) {
                      for(int j=i+1; j<array.length+i;j++) {
                          if(array[i]>=array[j%array.length])
                              count++;
                      }
          
                      for(int loc=count; loc>0;loc--) {
                          if(new_array[loc]==0)
                          {
                              new_array[loc]=array[i];
                              break;
                          }
                      }
                      count=0;                            
                  }
          
                  return new_array;
              }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-05-30
            • 2014-06-09
            • 2019-09-01
            相关资源
            最近更新 更多