Программирование на C и C++

Онлайн справочник программиста на C и C++

шейкер сортировка массива слов

Аватар пользователя merkul40
ср, 04/04/2018 - 21:34 -- merkul40
//произвести сортировку массива названий городов
// используя функцию strcmp
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define         SIZE    20

char shakerSort(char *[], int);
void printing(char *[]);

int main ()
{
        char *cityNames[] = {"Брест", "Жабинка", "Кобрин", "Каменец",
                "Береза", "Белоозерск", "Ивацевичи", "Барановичи", "Пружаны",
                "Ружаны", "Ганцевичи", "Пинск", "Столин", "Иваново",
                "Антополь", "Дрогичин", "Лунинец", "Микашевичи",
                "Давид-городок", "\n"};//20 элементов
       
        //printf("\n%ld\n",sizeof(cityNames));
       
        shakerSort(cityNames, SIZE);
       
        printing(cityNames);
        }

char shakerSort(char *CN[], int size)
{
        char * tmp;
        int left = 0, right = (size - 2);
       
        while (left < right)
        {
               
                for (int i = left; i < right; i++)//слева направо
                {
                        if (strncmp(CN[i], CN[i + 1], 4) > 0)
                        {
                                tmp = CN[i];
                                CN[i] = CN[i + 1];
                                CN[i + 1] = tmp;
                                }
                        }
                right--;
               
                ////////////////////////////////////////////////////////////
                for (int j = right; j > left; j--)
                {
                        if (strncmp(CN[j], CN[j - 1], 4) < 0)
                        {
                                tmp = CN[j];
                                CN[j] = CN[j - 1];
                                CN[j - 1] = tmp;
                                }
                        }
                left++;
               
                }
        }
       
void printing(char *CN[])
{
        int i = 0;
        while (CN [i] != "\n")
        {
                printf("\n%d\t%s\n", i, CN[i]);
                i++;
                }
        }