2016-04-26 149 views
-1

想象一下,您有十個具有十進制值的不同變量,您必須將它們從最低排序到最高排序。我熟悉使用不同編程語言的不同排序算法,但在這種情況下,我必須在最終用戶應用程序中構建算法,以允許輸入一些特定結構:它允許使用「for」,「while」 ,「if」,但與數組無關,這意味着,它不能處理像[a]這樣的數組,其中「a」是一個數組。請,任何人都可以給我一個線索?非常感謝!無陣列排序

+0

你的問題不清楚。首先,如果你不能在'a'上寫字,你不能在現場排序。您可以複製它,對其進行排序並返回該數組。或者,如果必須在給定輸入時查找最小/最大元素,請使用'heap' – vish4071

+0

因此,您嘗試使用不支持數組的語言進行排序? –

+1

這解決了你的問題http://stackoverflow.com/questions/25070577/sort-4-numbers-without-array。用你的號碼擴展4。 –

回答

1

你的意思是這樣的?

C++代碼:

void sort_4(int *a1, int *a2, int *a3, int *a4) 
{ 
    if (a1 == NULL) return; 
    if (a2 == NULL) return; 
    if (*a2 < *a1) swap(*a1, *a2); 
    sort_5(a1, NULL, NULL, NULL); 
    if (a3 == NULL) return; 
    if (*a2 < *a3) swap(*a2, *a3); 
    sort_5(a1, a2, NULL, NULL); 
    if (a4 == NULL) return; 
    if (*a4 < *a3) swap(*a3, *a4); 
    sort_5(a1, a2, a3, NULL); 
} 

您可以將其擴展到10個元素通過複製和粘貼或通過代碼生成腳本。

+0

謝謝@Ke Yang,但在這種情況下,我無法以遞歸方式調用方法。 – chufabit

+0

那麼你可能需要使用大量的代碼來實現排序。例如,使用冒泡排序比較10個元素的約50倍。您可以編寫腳本來生成代碼。 –

0

那麼,你可以硬編碼一個冒泡排序。例如,假設你有10個變量,a, b, c, d, e, f, g, h, i, j

for (int x = 0; x < 9; ++x) 
{ 
    if (a > b) swap(a,b); 
    if (b > c) swap(b,c); 
    if (c > d) swap(c,d); 
    if (d > e) swap(d,e); 
    if (e > f) swap(e,f); 
    if (f > g) swap(f,g); 
    if (g > h) swap(g,h); 
    if (h > i) swap(h,i); 
    if (i > j) swap(i,j); 
} 

這不是非常有效的,但你不會注意到在只有10級左右的項目的UI應用程序的效率。你可以把它稍微更有效地通過嵌套條件語句:

if (x < 9) 
    { 
     if (a > b) swap(a,b); 
     if (x < 8) 
     { 
      if (b > c) swap(b,c); 
      if (x < 7) 
      { 
       .... 

但是,匆忙得笨拙,再小的效率,它可以讓你不會注意到這樣的小單子。