Это просто код, предназначенный для сортировки элементов массива, но он никогда не будет работать в его текущей форме, так как:
temp=list[in];
list[out]=temp;
перезапишет list[out]
с list[in]
без сохранения исходного содержимого list[out]
.
Лучший способ поменять местами две переменные это что-то вроде:
temp = array[index1];
array[index1] = array[index2];
array[index2] = temp;
И, пожалуйста, ради любви к любому божеству, в которое вы верите, не делайте это : -)
Итак, если ваш вопрос заключается в том, как отсортировать данные, тогда должен помочь следующий псевдокод. Я бы предоставил код на C, но если у вас нет шансов, что это домашнее задание, вы должны выполнить часть работы самостоятельно a .
def sort (arr[], sz):
swapped = true # Force loop entry.
while swapped: # Loop until a pass had no swaps.
swapped = false
for idx goes from 1 to sz-1: # For all but the first element.
if arr[idx-1] > arr[idx]: # If order is wrong.
swapped = true # More passes will be needed.
temp = arr[idx-1] # Swap
arr[idx-1] = arr[idx] # the
arr[idx] = temp # elements.
Это разновидность пузырьковой сортировки, которая завершается сразу после сортировки списка (ну, после одного прохода без перестановок). Некоторые наивные варианты просто продолжат примерно n<sup>2</sup>
раза независимо
.
a Если вы хотите указать в комментарии, что это не домашнее задание, я был бы рад предоставить код C. Просто знайте (если вы планируете врать мне), что ваши преподаватели почти наверняка смогут увидеть этот код, и вы, вероятно, потерпите неудачу в этом случае (или будете исключены за явный плагиат).
И, поскольку вы заявили, что это не домашняя работа, вот полная программа на C, иллюстрирующая это:
#include <stdio.h>
#include <stdlib.h>
#define FALSE (1==0)
#define TRUE (1==1)
static void sort (int arr[], int sz) {
int idx, temp, swapped;
swapped = TRUE; // Force loop entry.
while (swapped) { // Loop until a pass had no swaps.
swapped = FALSE;
for (idx = 1; idx < sz; idx++) { // For all but the first element.
if (arr[idx-1] > arr[idx]) { // If order is wrong.
swapped = TRUE; // More passes will be needed.
temp = arr[idx-1]; // Swap
arr[idx-1] = arr[idx]; // the
arr[idx] = temp; // elements.
}
}
}
}
int main (int argc, char *argv[]) {
int sz, i, *vals;
sz = argc - 1;
if (sz < 1)
return 0;
if ((vals = malloc (sz * sizeof (int))) == NULL) {
printf ("ERROR: Cannot allocate memory.\n");
return 1;
}
for (i = 0; i < sz; i++)
vals[i] = atoi (argv[i+1]);
printf ("Numbers before:");
for (i = 0; i < sz; i++)
printf (" %d", vals[i]);
printf ("\n");
sort (vals, sz);
printf ("Numbers after :");
for (i = 0; i < sz; i++)
printf (" %d", vals[i]);
printf ("\n");
free (vals);
return 0;
}
Запуск этого с:
$ ./testprog 3 1 4 1 5 9 2 6 5 3 5 8 9
дает вам вывод:
Numbers before: 3 1 4 1 5 9 2 6 5 3 5 8 9
Numbers after : 1 1 2 3 3 4 5 5 5 6 8 9 9