2015-05-15 4 views
-6

Мне нужно сделать программу, которая просит пользователя ввести массив из 10 элементов с номерами от 0 до 9.Алгоритм сортировки с 10 элементами

Затем массив отправляется в функцию. Эта функция сортирует каждое число в массиве следующим образом:

sort

Я не знаю, как изменить число.

+2

Вы говорите, что вы не знаете, как поменять номера вокруг или вы не понимаете, что вопрос спрашивает? Вопрос заключается в том, что вы берете индекс каждой позиции в массиве, а совпадение - со значением. Первый индекс равен 0, но в массиве нет соответствующего значения, поэтому поместите в элементе, отмеченном индексом 0, значение 0. Следующий элемент равен 1, поэтому попробуйте найти значение 1 в массиве, если вы найдите его, поместите его в элемент, отмеченный индексом 1, или если нет, поместите там 0. Следующий индекс равен 2 и т. Д. И т. Д., Следуя по всему массиву, как это. –

+0

Функция не включает только сортировку. Для получения желаемого результата выполняется другой набор операций над массивом. 'Что вы можете сделать, так это задать вопрос, упомянутый в этой ссылке, и также перейти через http: // stackoverflow.com/help/mcve'' –

+0

Я понимаю вопрос, но я не понимаю, как подойти к проблема. – andrespm

ответ

0

Вот моя реализация комментария Joel Gregory «S:

Эта функция создает неотредактированный массив, копирует содержимое оригинала на него, затем петли от первого индекса до последнего. Он будет использоваться в качестве основы для проверки любых совпадений индексов.

На каждой итерации функция выполняет поиск в неотредактированном массиве, если любой из его элементов соответствует номеру индекса. Если да, оно заменяет начальное значение на значение индекса. Else, присваивается нуль. И так далее до последнего индекса.

void swap(int *original, int max_elements) { 

     int index = 0, matcher = 0, unedited[max_elements]; 

     // copies original to unedited 
     memcpy(unedited, original, max_elements * sizeof(int)); 

     for (--index; ++index < max_elements;) { 

      // searches the original array for matches with the current index 
      // loops until it finds a match or it reaches the maximum number of elements 
      for (matcher = 0; unedited[matcher] != index && ++matcher < max_elements;); 

      // if there is match, the initial value is changed with it's index value, else zero is the new value. 
      original[index] = (matcher != max_elements) ? index : 0; 
     } 
} 

Выход:

Original: 1 1 7 8 2 8 1 6 3 2 
Sorted: 0 1 2 3 0 0 6 7 8 0 
Смежные вопросы