Как использовать пузырьковую сортировку и сортировку 2d массива со строками - PullRequest
2 голосов
/ 04 мая 2019

Я хочу иметь основную программу, которая читает 10 имен, используя scanf (максимум 100 символов), сохраняет их в двумерный массив (char[10][100]), а затем вызывает функцию, которая имеет алгоритм сортировки пузырьков и сортирует2D массив.И, наконец, я хочу, чтобы основная программа напечатала отсортированный 2D-массив.

Прототип функции:

void bubble_sort(str[][100]);

Кто-нибудь может показать мне код?

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define SIZE 10

void bubble_sort(char str[SIZE][100]);

int main (void) {
    char names[SIZE][100];
    int i, j;
    for (i = 0; i < SIZE; i++) {
        printf("Enter names: ");
        scanf("%s", names[i]);
    }

    bubble_sort(names);

    for (int i = 0; i < SIZE; i++)
        printf ("%s\n", names[i]);
}

void bubble_sort(char str[SIZE][100]) {
    int i, j, reorder = 0;
    char temp;

    for (i = 1; i < SIZE; i++) {
        for (j = SIZE - 1; j >= i; j--) {
            if (strcmp(str[j], str[j + 1]) > 0) {
                strcpy(temp, str[j + 1]);
                strcpy(str[j + 1], str[j]);
                strcpy(str[j], temp);
                reorder = 1;
            }
        }
        if (reorder == 0)
            return;
    }
}

Я ожидаю набрать 10 имен, а затем получить в качестве вывода эти 10 имен в алфавитном порядке по возрастанию.

1 Ответ

2 голосов
/ 04 мая 2019

Это мой ответ, надеюсь, он вам пригодится.

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

#define SIZE 10

void bubble_sort(char str[SIZE][100]);

int main (void) 
{
    char names[SIZE][100];
    printf("The max length of name is 99\n");
    int i;
    for(i=0;i<SIZE;i++){
        printf("Enter names:");
        scanf("%99s",names[i]);
    }

    bubble_sort (names);

    for (int i = 0; i < SIZE; i++)
        printf ("%s\n", names[i]);
    return 0;
}

void bubble_sort (char str[SIZE][100])
{
    int i, j;
    char temp[100] = {0};

    for (i = 0; i < 10 - 1; i++) {
        for (j = 0; j < 10 - 1 - i; j++) {
             if (strcmp(str[j], str[j + 1]) > 0) {
                strcpy(temp, str[j]);
                strcpy(str[j], str[j + 1]);
                strcpy(str[j + 1], temp);
            }
        }
    }

}

Вышеуказанный вывод программы:

Enter names:ca
Enter names:sd
Enter names:fgg
Enter names:cb
Enter names:dssd
Enter names:hgf
Enter names:jydt
Enter names:jdjy
Enter names:dgr  
Enter names:htr
ca
cb
dgr
dssd
fgg
hgf
htr
jdjy
jydt
sd
...