Я хочу сортировать матрицу 2 * n, n указывается на входе. Сделайте программу для вывода матрицы. Здесь требование:Ошибка при сортировке пузырьков
- первый столбец должен быть отсортирован в ASC и
- второго столбца в DESC, если это возможно.
Например, пусть п = 5, а матрица
3 4
1 2
3 5
1 6
7 3
Результат должен быть
1 6
1 2
3 5
3 4
7 3
Так я записываю код, как это. Первая строка вводит значение n и следующие строки, как указано выше.
#include <stdio.h>
#define TWO_16 65536
#define TWO_15 32768
int v[100000][2];
int z[100000];
int vec[100000];
int n;
int main()
{
int i, j;
scanf ("%d", &n); // give the value of n;
for (i = 1; i <= n; i++) // filling the matrix;
{
scanf ("%d%d", &v[i][0], &v[i][1]);
z[i] = TWO_16 * v[i][0] + TWO_15 - v[i][1];
vec[i] = i;
}
for (i = 1; i <= n; i++)
for (j = 1; j <= i; j++)
{
if (z[j] > z[i])
{
int t = vec[i];
vec[i] = vec[j];
vec[j] = t;
}
}
for (i = 1; i <= n; i++) // output the matrix
printf("%d %d\n",v[vec[i]][0],v[vec[i]][1]);
return 0;
}
Но в НКУ, выход
1 6
3 5
3 4
1 2
7 3
Более того, когда первая строка изменяется на «1 2», а второй изменяется на «3 4» на входе, результат также изменился.
В чем проблема с моим кодом?
Дополнительная информация:
Я использую z[]
потому что я использую функцию, которая удовлетворяет требованиям этой проблемы, так что я могу просто отсортировать их. И vec[]
хранит исходный индекс, потому что перемещение массивов может стоить много времени. Таким образом, v[vec[i]][0]
означает элемент «нового» массива i
. Обратите внимание, что v [0] НЕ используется. n меньше 100000, не равно.
* «Но в НКУ, выход» * Как если бы даже было возможно ошибиться в gcc ... Не следует отмечать gcc, но с C. –
Не понимаю, почему это было приостановлено, по крайней мере, не в текущем отредактированном состоянии. –
Вся вещь 'z []' не принадлежит алгоритму сортировки buble. См. Http://en.wikipedia.org/wiki/Bubble_sort – vines