2010-10-15 2 views
1

Не уверен, что это дубликат. Учитывая структуру данных, имеющую первые N целые числа и следующие N символы. A = i1 i2 i3 ... iN c1 c2 c3 ... cN. Мне нужен алгоритм на месте, чтобы переставить элементы как A = i1 c1 i2 c2 ... iN cN.Реорганизация элементов массива

+1

Почти дубликат: http://stackoverflow.com/questions/3777184/rotate-2d-rectangular-array-in-place/3777262 – ybungalobill

+2

В чем вопрос? Конечно, мы не собираемся писать для вас весь ваш код. У вас есть код для обмена? У вас есть проблемы, с которыми мы можем вам помочь? – abelenky

+3

btw: Как массив C/C++ хранит как символы, так и ints, без большого количества приведения типов? – abelenky

ответ

4

Ваша проблема эквивалентна переносу матрицы 2xN на место. Вы можете прочитать теорию здесь: http://en.wikipedia.org/wiki/In-place_matrix_transposition

Возможно, в специальном случае матрицы 2xN существует более простой алгоритм, но я не могу придумать ни одного. Общая идея состоит в том, чтобы следовать циклам перестановки.

+0

Можете ли вы не генерировать эти циклы, используя http://www.cplusplus.com/reference/algorithm/next_permutation/? –

+0

@ Андре: Нет. Какая связь? – ybungalobill

+0

Ничего, я смутился чем-то другим. –

1

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

Все что вам нужно, это хорошая функция сравнения, затем используйте qsort.

Вы знакомы с qsort?
Вы создали какую-либо часть функции сравнения, которую вы можете поделиться с нами?

Редактировать
Как commentors уже отмечалось, qsort, std::sort и другие подобные процедуры нужны объекты одинакового размера. Поскольку вопрос требует массива int и символов, которые имеют разные размеры и не являются строго возможными в C/C++, требуется дополнительная информация.

Как именно объявляется этот массив? Насколько велики цепочки и насколько велики символы? Существует ли существование символов, что N ограничено 255?

Еще раз, код будет действительно помощь.

+1

Зачем использовать C-библиотеку при наличии версий C++? std :: sort() –

+2

Вам нужно поддерживать порядок, в котором появляются символы int/chars, поэтому сортировка не будет работать. – casablanca

+0

Любая стабильная сортировка (mergeSort, insertionSort, bubbleSort) будет работать, но qsort (quickSort) нестабилен, поэтому он не будет работать для того, что хочет OP. –

1

В этом вопросе, по-видимому, есть 3 проблемы.

  1. Вставьте оба предмета в один список. Есть несколько способов сделать это, но это будет не так.
  2. partition данные для разделения символов и ints.
  3. sort каждый раздел для заказа символов и порядка ints.
Смежные вопросы