Сформирован массив по определённому правилу, необходимо упорядочить его строки по возрастанию первого эл-та строки. Сделал код, но он не работает, не могу разобраться почему. Язык чистый СИ. А - двумерный массив, m - длина массива. Массив квадратный. Пытался сделать своеобразным методом пузырька. Заранее спасибо.
for (int j=1; j<m-1; j++) {
for (int i=0; i<m-j; i++) {
if (A[i][0]<A[i+1][0]) {
for (int k=0; k<m; k++) {
b=A[i][k];
A[i][k]=A[i+1][k];
A[i+1][k]=b;
}
}
}
}
Другие языки программирования и технологии
Необходимо упорядочить строки двумерного массива, по возрастанию первого эл-та. СИ.
#include <stdio.h>
#include <stdbool.h>
#define RANK 3
void swap_line(int* va, int* vb);
void swap(int* a, int* b);
void show(int* vector);
void print(int matrix[][RANK]);
void bubble(int matrix[][RANK]);
int main(void) {
int matrix[RANK][RANK] = { { 5, 3, 6 }, { 1, 8, 2 }, { 4, 1, 9 } };
printf("\n Before:\n\n");
print(matrix);
bubble(matrix);
printf("\n After:\n\n");
print(matrix);
getchar();
}
void swap_line(int* va, int* vb) {
int i;
for (i = 0; i < RANK; ++i) swap(&va[i], &vb[i]);
}
void swap(int* a, int* b) {
int tmp = *a;
*a = *b;
*b = tmp;
}
void show(int* vector) {
int i;
for (i = 0; i < RANK; ++i) printf(" %i ", vector[i]);
}
void print(int matrix[][RANK]) {
int i;
for (i = 0; i < RANK; ++i, printf("\n")) show(matrix[i]);
}
void bubble(int matrix[][RANK]) {
int vector[RANK];
int i, j;
_Bool swapped;
for (i = 0; i < RANK; ++i) vector[i] = matrix[i][0];
for (i = 0; i < RANK - 1; ++i) {
swapped = false;
for (j = 0; j < RANK - i - 1; ++j) {
if (vector[j] > vector[j + 1]) {
swap_line(matrix[j], matrix[j + 1]);
swap(&vector[j], &vector[j + 1]);
swapped = true;
}
}
if (!swapped) break;
}
}
#include <stdbool.h>
#define RANK 3
void swap_line(int* va, int* vb);
void swap(int* a, int* b);
void show(int* vector);
void print(int matrix[][RANK]);
void bubble(int matrix[][RANK]);
int main(void) {
int matrix[RANK][RANK] = { { 5, 3, 6 }, { 1, 8, 2 }, { 4, 1, 9 } };
printf("\n Before:\n\n");
print(matrix);
bubble(matrix);
printf("\n After:\n\n");
print(matrix);
getchar();
}
void swap_line(int* va, int* vb) {
int i;
for (i = 0; i < RANK; ++i) swap(&va[i], &vb[i]);
}
void swap(int* a, int* b) {
int tmp = *a;
*a = *b;
*b = tmp;
}
void show(int* vector) {
int i;
for (i = 0; i < RANK; ++i) printf(" %i ", vector[i]);
}
void print(int matrix[][RANK]) {
int i;
for (i = 0; i < RANK; ++i, printf("\n")) show(matrix[i]);
}
void bubble(int matrix[][RANK]) {
int vector[RANK];
int i, j;
_Bool swapped;
for (i = 0; i < RANK; ++i) vector[i] = matrix[i][0];
for (i = 0; i < RANK - 1; ++i) {
swapped = false;
for (j = 0; j < RANK - i - 1; ++j) {
if (vector[j] > vector[j + 1]) {
swap_line(matrix[j], matrix[j + 1]);
swap(&vector[j], &vector[j + 1]);
swapped = true;
}
}
if (!swapped) break;
}
}
Мамке своей скажи, чтобы мне бабло перечислила и тогда я сделаю задание для её тупого выродка.
Функцию сортировки напиши как отдельную функцию, на вход подавай адрес массива (его имя) и индексы начальный и конечный. Вот примерный псевдокод.
#define row 5
#define col 5
int array[row*col] = {25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1};
void bubble_sort(int* array,unsigned begin_index,unsigned end_index);//Объявление функции
int main()
{
for (unsigned x = 0; x < row;++x)
bubble_sort(array,x*row,(x+1)*col);
return 0;
}
#define row 5
#define col 5
int array[row*col] = {25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1};
void bubble_sort(int* array,unsigned begin_index,unsigned end_index);//Объявление функции
int main()
{
for (unsigned x = 0; x < row;++x)
bubble_sort(array,x*row,(x+1)*col);
return 0;
}
Похожие вопросы
- помогите с программой!!! (Си) Двумерный массив+строки
- в двумерном массиве возвестив квадрат строки, расположенные между строками с мин и макс элементами
- Помогите !!!С++Работа с одномерными и двумерными массивами. В каждой строке матрицы F(k, k) элемент. лежащий на главной
- Дан двумерный массив целых чисел. Упорядочить прямую диагональ в порядке убывания.
- Как удалить все чётные строки из двумерного массива С++
- Двумерный массив. Язык Си.
- помогите срочно надо Квадратные массивы тема: Двумерные массивы на языке C++
- дан двумерный массив С(3,4).Получите новый массив А путём увеличения всех элементов исходного массива на число С.
- .помогите пожалуйста двумерный массив на языке c++
- Как можно передать ДВУМЕРНЫЙ массив в функцию в С++, не создавая его, как глобальный. Пример ниже:
Спасибо, но если здесь и есть выродок, то это ты)
И да, надеюсь если тебе понадобиться помощь, то вокруг будут такие-же отзывчивые люди, как и ты)