2012-03-29 106 views
5

我有一個家庭作業,按升序排列數組。顯然,這是要手動完成的,而不使用任何種類的sort()函數。按升序手動對數組進行排序

我想這樣做,我需要兩個for循環:第一個循環遍歷現有的數組,並創建一個臨時值與數組的值和索引。第二個循環會將臨時值與現有值進行比較並對它們進行排序。我一直試圖編寫代碼,但我似乎無法做到。這裏是我想出了最新的方法:

public int[] sortArray (int[] inArray) 
{ 
    //Construct the array we're using here 
    int[] newArray = inArray; 

    for(int x = 0; x < a.length; x++) //a.length = # of indices in the array 
    { 
     int tempValue = a[x]; 
     int tempIndex = x; 

     for(int y = 0; y < a.length; y++) 
     { 
      if(tempValue < a[y]) 
      { 
       newArray[x] = tempValue; 
      } 
     } 
    } 

    return newArray; 
} 

我敢肯定,這是不正確的,但如果有人可以把我在正確的方向,將不勝感激!

+1

這可能是值得你首先看不同的排序算法的一些僞代碼:http://maven.smith.edu/~thiebaut/java/sort/ – Magrangs 2012-03-29 14:45:19

+0

你應該使用某種排序算法? – twain249 2012-03-29 14:46:11

+0

除非明確要求您考慮排序算法,否則我建議您找到一個簡單的排序算法並在代碼中實現它。而不是「確定」你的代碼不正確,只需測試一下並找出答案。 – alexis 2012-03-29 14:46:14

回答

5

您有一個幾乎OK版本的Selection Sorter。你需要開始yx+1,而不是在0。否則,您將重新掃描陣列的排序部分。您還應該注意,選擇排序是一種就地算法;如果你正在尋找一個拷貝的數組,你應該使用Arrays.copy方法,否則int[] newArray = inArray; 正在創建一個別名,而不是副本。最後,在嵌套循環的if語句應該交換a[x]a[y],不能簡單地把tempValue在:

if(newArray[x] < newArray [y]) { 
    int tempValue = newArray[y]; 
    newArray[y] = newArray[x]; 
    newArray[x] = tempValue; 
} 
+0

您能否詳細介紹一下交換部分? – 2012-03-29 15:13:02

+1

@AndrewDeForest當然,請參閱編輯。 – dasblinkenlight 2012-03-29 15:17:59

+0

感謝您提供關於'Arrays.copy'的提示!我有點俯視,但事實證明,這是我的問題:) – 2012-03-29 15:27:52

1

,而不是試圖去創造自己的排序算法,我也希望你學什麼已經存在。在此有現有技術的。

查看維基百科相關文章:Sorting algorithm

Bubble sort很容易實現,但具有二次複雜性(與當前的嘗試相同)。

Quicksort也不難實現,並且具有更好的平均複雜度。

1

排序,你正在努力實現被稱爲Bubble sort - 維基百科條目是相當不錯的,你應該閱讀。雖然,它從來沒有真正使用,因爲有更好的選擇 - Insertion sort(一個例子是Python中的Timsort,它是合併排序和插入排序的混合體)。這兩個是適合您的想法的兩個循環的基本算法,因此O(複雜度爲O)。

你也應該考慮爲您的分配不同的算法或者,至少,是知道的:

希望它能幫助。

0
int minval = input[0]; 
int temp=0; 


for(int i = 0; i< input.length; i++) 
{ 
    for(int j = 0; j< input.length-1; j++) 
    { 
     if(input[j+1]<input[j]) 
     { 
      temp=input[j+1]; 
      input[j+1]=input[j]; 
      input[j]=temp; 
     } 
    } 
} 
+2

不要只添加代碼。描述你做了什麼 – Jens 2016-09-30 13:49:33

+0

你在做什麼? Minval未使用 – 2017-04-23 10:34:22

0
int arr[] = new int[]{10, 20, 5, 6, 30, 1, 2}; 
    boolean bool = true; 
    int t = 0; 
    while (bool) { 
     for (int i = 0; i < arr.length - 1; i++) { 
      if (arr[i] > arr[i + 1]) { 
       int c = arr[i]; 

       arr[i] = arr[i + 1]; 
       arr[i + 1] = c; 
       t++; 
      } 
     } 
     if (t == 0) { 
      bool = false; 
     } 
     t = 0; 
    } 

    for (int y : arr) { 
     System.out.println(y); 
    } 
+0

請勿僅添加代碼。描述你做了什麼 – Jens 2016-09-30 13:49:16

-1
int[] number = { 1,2,1,3,5,4 }; 
    int temp; 
    for (int i = 0; i < number.length; i++) 
     { 
      for (int j = i + 1; j < number.length; j++) 
      { 
       if (number[i] > number[j]) 
       { 
        temp = number[i]; 
        number[i] = number[j]; 
        number[j] = temp; 
       } 
      } 
     } 

     for (int i = 0; i <number.length; ++i) 
      System.out.println(number[i]); 
    } 
+1

不要只添加代碼。加入描述 – Jens 2016-09-29 13:35:10

+2

歡迎來到Stack Overflow!雖然這段代碼可能有助於解決問題,但它並沒有解釋_why_和/或_how_它是如何回答這個問題的。提供這種附加背景將顯着提高其長期教育價值。請[編輯]您的答案以添加解釋,包括適用的限制和假設。 – 2016-09-29 14:15:56