Symba87
Newbie | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Спасите мои красные глаза, пожалуйста! Хочу отсортировать двумерный массив по схеме: 10 | 4 | 3 | 1 | 11 | 9 | 5 | 2 | 15 | 12 | 8 | 6 | 16 | 14 | 13 | 7 | то есть по диагональной "змейке". пытаюсь вот так: Код: #include<stdio.h> #include<stdlib.h> #include<time.h> /*ФУНКЦИЯ ОБМЕНА ЗНАЧЕНИЯМИ МЕЖДУ ДВУМЯ ПЕРЕМЕННЫМИ*/ #define SWAP(a, b) { int t = a; a = b; b = t; } #define I_MAX 5 /*КОНСТАНТА КОЛИЧЕСТВА СТОЛБЦОВ*/ #define J_MAX 5/*КОНСТАНТА КОЛИЧЕСТВА СТРОК*/ int main() { int mass[I_MAX][J_MAX]; int i, j, n, v, f = 1, x = 0; clock_t start = clock(); /*ИНИЦИАЛИЗАЦИЯ ЯДРА ФУНКЦИИ rand()*/ srand((unsigned)time(NULL));rand();rand(); printf("Исходный массив:\n"); /*ЗАПОЛНЕНИЕ МАССИВА СЛУЧАЙНЫМИ ЧИСЛАМИ И ВЫВОД НА ЭКРАН*/ for (i = 0; i < I_MAX; i++) { for(j = 0; j < J_MAX; j++) { x++; /*mass[i][j] = rand() % 9; ЗАПОЛНЕНИЕ МАССИВА СЛУЧАЙНЫМИ ЧИСЛАМИ*/ mass[i][j] = x; printf("%02d ", mass[i][j]); } printf("\n"); } /*ЦИКЛ С УСЛОВИЕМ "ВЫХОД - ЕСЛИ НЕТ ПЕРЕСТАНОВОК"*/ while ( f != 0 ) { f = 0;/*ОБНУЛЕНИЕ ФЛАГА*/ for (n = 1, i = 0, j = J_MAX-1, v = 1; n <= I_MAX*J_MAX; n++) { /*mass[i][j] = n;*/ i += v; j += v; if (j == J_MAX) { j--; if(mass[i][j] > mass[i-1][j]) { SWAP(mass[i][j], mass[i-1][j]); f = 1;/*ЕСЛИ СЛУЧИЛАСЬ ПЕРЕСТАНОВКА*/ } v = -v; }else if (i == -1) { i++; if(mass[i][j] > mass[i][j+1]) { SWAP(mass[i][j], mass[i][j+1]); f = 1;/*ЕСЛИ СЛУЧИЛАСЬ ПЕРЕСТАНОВКА*/ } v = -v; }else if (i == I_MAX) { i--; j -=2; if(mass[i][j] > mass[i][j+1]) { SWAP(mass[i][j], mass[i][j+1]); f = 1;/*ЕСЛИ СЛУЧИЛАСЬ ПЕРЕСТАНОВКА*/ } v = -v; }else if (j == -1) { j++; i += 2; if(mass[i][j] > mass[i-1][j]) { SWAP(mass[i][j], mass[i-1][j]); f = 1;/*ЕСЛИ СЛУЧИЛАСЬ ПЕРЕСТАНОВКА*/ } v = -v; }else if(mass[i][j] > mass[i-v][j-v]) { SWAP(mass[i][j], mass[i-v][j-v]); f = 1;/*ЕСЛИ СЛУЧИЛАСЬ ПЕРЕСТАНОВКА*/ /*i += v; j += v;*/ } } } printf("Сортированный массив:\n"); for (i = 0; i < I_MAX; i++) { for(j = 0; j < J_MAX; j++) { printf("%02d ", mass[i][j]); } printf("\n"); } printf("\n"); printf("Время работы = %.15lf сек\n", ((double)(clock() - start)) / ((double)CLOCKS_PER_SEC)); return 0; } | выдает не то, что ожидалось. Отправьте мои мысли по нужному направлению, пожалуйста! З.Ы. просто учусь в свободное время. | Всего записей: 12 | Зарегистр. 15-05-2013 | Отправлено: 17:42 08-01-2014 | Исправлено: Symba87, 21:19 08-01-2014 |
|