Проблема с алгоритмом сортировки массива

У меня есть три массива. И я пытаюсь отсортировать их всех по одному из них. Итак, мои массивы - это массив элементов, массив цен, массив количества. Я хочу, чтобы массив элементов был отсортирован, но соответствующие массивы не сортируются должным образом вместе с массивом элементов.

Вот алгоритм, который я создал. Вы знаете, как я могу это исправить??

DO i=1, NumItems-1

    SmallestItem = MINVAL(itemarray(i:NumItems))
    MINLOC_array = MINLOC(itemarray(i:NumItems))
    Locationsmallest = (i-1)+MINLOC_array(1)

    itemarray(Locationsmallest) = itemarray(i)
    itemarray(i) = SmallestItem

    pricearray(Locationsmallest) = pricearray(i)
    pricearray(i) = SmallestItem

    quantityarray(Locationsmallest) = quantityarray(i)
    quantityarray(i) = SmallestItem

END DO  

person EuropaDust    schedule 18.04.2011    source источник


Ответы (1)


Вы устанавливаете pricearray(i) на то, что пришло от itemarray. Вы должны поменять местами pricearray(Locationsmallest) и pricearray(i), что можно сделать, сохранив значение pricearray(Locationsmallest) во временной переменной.

То же самое верно и для quantityarray(i).

Кстати, это алгоритм O(n^2), и он, вероятно, будет очень медленным, когда в вашем массиве большое количество значений.

person Simon Nickerson    schedule 18.04.2011
comment
Должна ли временная переменная быть примерно такой: pricearray(locationsmallest)=pricesmalestitem У меня проблемы с логикой. - person EuropaDust; 18.04.2011
comment
@EuropaDust: Что-то вроде: temp = pricearray (Locationsmallest); массив цен (наименьшее расположение) = массив цен (i); массив цен (i) = темп. (Замените точки с запятой на символы новой строки.) Но, признаюсь, я не знаю синтаксиса Фортрана, поэтому вам, возможно, придется немного изменить это. - person Simon Nickerson; 19.04.2011
comment
На самом деле это совершенно прекрасный фортран, даже с включенными точками с запятой. - person eriktous; 19.04.2011