2016-04-26 4 views
-1

Представьте, что у вас есть десять различных переменных с десятичными значениями, и вам нужно сортировать их от самого низкого до самого высокого. Я знаком с различными сортировочными алогоритами, использующими разные языки программирования, но в этом случае мне нужно построить алгоритм в приложении конечного пользователя, который просто позволяет вводить некоторые специфические конструкции: он позволяет использовать «для», «в то время», , «если», но не имеет ничего общего с массивами, значит, он не может иметь дело с чем-то вроде [i], где «a» - это массив. Пожалуйста, дайте мне подсказку? Большое спасибо!Сортировка без массивов

+0

Ваша проблема непонятна. Во-первых, если вы не можете писать на 'a', вы не можете сортировать inplace. Вы можете сделать его копию, отсортировать и вернуть этот массив. Или если вам нужно найти элемент min/max при вводе вам, используйте '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

, тогда вам может понадобиться использовать большой объем кода для реализации сортировки. например, примерно в 50 раз сравнить 10 элементов, используя сортировку пузырьков. Вы можете написать сценарий для генерации кода. –

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); 
} 

Это не очень эффективно, но вы не будете замечать неэффективность в приложении UI, который имеет только 10 или около того пунктов. Вы можете сделать его немного более эффективным путем вложения в условном:

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

Но это становится громоздким в спешке и снова маленькую эффективность она дает вам не будут замечена за такой небольшой список.

Смежные вопросы