2015-11-01 150 views
2

我想按升序对数组排序。由于某些原因,它只执行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; 
    } 
} 
+0

- - 你的程序在哪里告诉它不止一次地执行它?该计划将只会做你告诉它做的事情。 – slim

回答

2
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; 
} 
0

您正在试图进行排序使用单个环路的阵列。您将需要两个循环来确保元素按排序顺序排列。

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; 
} 
-1
arr = new int[Item]; 
    Arrays.sort(arr); 

内置函数在Java以按顺序asceding阵列。

-1

这将升序排列的阵列

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

输出将: - “出于某种原因,它仅用于循环执行一次”[3,4,5,33]