2010-07-23 53 views
2

如果我想第二個維度的元素0排序這樣的:C++數組值排序

short arr[5]; 

arr[0][0] = 122; 
arr[0][1] = 33; 
arr[0][2] = 45; 

arr[1][0] = 33; 
arr[1][1] = 12; 
arr[1][2] = 42; 
. 
. 
. 

它將排序arr[i][0],但arr[i][1]arr[i][2]將拿出arr[i][0]到一個新的元素。

+0

使用C++'vector <>'而不是C風格的數組 - 然後您可以應用'sort'方法。如果*由於某種原因*必須*使用C風格的數組,那麼使用'cstdlib'中的'qsort()'進行排序。 – 2010-07-23 21:29:15

+2

@Paul:'sort'是一種通用的非成員函數算法。它可以像使用'vector'一樣方便地與數組一起使用。 – 2010-07-23 21:31:14

+6

您聲明瞭一維數組並正在將其作爲二維數組進行訪問?你想在這裏做什麼? – bta 2010-07-23 22:02:46

回答

6

要按一個標準的C數組:

#include <algorithm> 
    ... 
    sort(&arr[0], &arr[0] + 5) 

現在,如果你有一個二維數組,你可以使用同樣的想法進行排序每個項目在第一維的第二維:

short arr[5][5]; 
... 
for(int i = 0; i < 5; ++i) { 
    sort(&arr[i][0], &arr[i][0] + 5); 
} 
3

std::sort will,默認情況下,按升序排序對象。若要按降序排列,您可以使用std::greater函數對象:

std::sort(arr, arr + 5, std::greater<short>()); 
1

有太多的排序算法,快速排序一樣和冒泡排序,具有不同的複雜性。這種複雜性隨數據集的大小,數據集內數據的默認順序等而異。您必須研究您的數據集並選擇一種能夠更快地滿足您的需求的算法。您可以在http://en.wikipedia.org/wiki/Sorting_algorithm中找到排序算法。

+2

考慮到標準庫有'sort'(平均情況N log N)和'stable_sort'(最壞情況N(log N)^ 2),很少有很好的理由來實現你自己的排序算法。 – 2010-07-23 21:40:58

1

如果這是一項家庭作業,您可能不想使用std::sort。你的老師可能會認爲你厚顏無恥:P

我願意跟Muhit說的一樣,並嘗試從Wikipedia的排序算法文章中學習,http://en.wikipedia.org/wiki/Sorting_algorithm。大多數單獨的文章都以僞代碼實現了算法,因此您可以選擇一個代碼進行編碼。

但是,如果這是一個不同的項目,是的,肯定會去STL,應該沒有任何理由現在手動編碼排序算法。

+0

這不是一項家庭作業。 – sundowatch 2010-07-24 09:05:36