Сортировка (си)

Тема в разделе "Общие вопросы по С и С++", создана пользователем d3fToR, 15 май 2012.

Статус темы:
Закрыта.
  1. d3fToR

    d3fToR Гость

    Такая проблема.. не могу сделать отладку, час сижу уже глаза мозолю, но не получается что-то. Программа компилируется без ошибок, но не сортируется в правильном порядке. Сначало сортирует буквы в слове, например, август - тсугва. И таких слов 12, потом он должен отсортировать их между собой, но из-за того, что справа на лево ( слева на право идет нормально ), не сортируется. Если вы скомпилируете, то там будет сначало 2 столбика, потом один с цифрами и словами, а потом анаграммы этих слов.
    Вообщем, если будут вопросы по коду - спросите!
    Код (C++):
    #include <stdio.h>
    #include "string.h"


    void sortf(char *mas, int k)
    {
    int i,j,idmin;
    char min;
    for(i=k-2;i>=0;i--)
    {
    min=mas[i];
    idmin=i;
    for(j=i;j>=0;j--)
    {
    if(mas[j]<min)
    {
    min=mas[j];
    idmin=j;  
    }
    }  
    mas[idmin]=mas[i];
    mas[i]=min;
    };
    };


    int srav(char *mas, char *mas2)
    {
    int i,g=0;
    for(i=6;i>=0;i--)
    {
    if (mas[i]>mas2[i])  {g= 1; break;}
    else if (mas[i]<mas2[i]) {g=-1; break;}
    }
    return(g); //возращает: 0 - если строки равны  1 - если первая больше второй  -1 - если первая меньше второй   
    }




    void fedos()
    {
    int x=12,y=8,z,h,idmin,i,flag,j; //x- кол-во слов, y- кол-во букв( вкл. \0)
    int id[12];
    char str[8];
    char f[12][10]={"бобслей",
    "белорус",
    "радение",
    "зачаток",
    "лесоруб",
    "дарение",
    "досолка",
    "солодка",
    "нереида",
    "драение",
    "бейсбол",
    "заточка"};

    char f2[12][10]={"бобслей",
    "белорус",
    "радение",
    "зачаток",
    "лесоруб",
    "дарение",
    "досолка",
    "солодка",
    "нереида",
    "драение",
    "бейсбол",
    "заточка"};

    for(i=0;i<x;i++)
    {
    sortf(f2[i],y);
    printf("\n%s \t %s", f[i],f2[i]);
    };
    printf("\n");
    for(i=0;i<x;i++)
    id[i]=i;
    for(i=0;i<x-1;i++)
    {
    strcpy(str, f2[id[i]]);
    idmin=i;
    for(j=0;j<x;j++)
    {
    flag=srav(str, f2[id[j]]);
    if(flag==1)//т.е строка в массиве больше минимума
    {
    strcpy(str, f2[id[j]]);
    idmin=j;
    };
    };
    z=id[i];
    id[i]=id[idmin];
    id[idmin]=z;
    };
    for(h=0;h<12;h++) printf("\n%2i %s",id[h], f2[id[h]]);
    printf("\n");
    for(i=1;i<x;i++)
    {
    flag=srav(f2[id[i-1]],f2[id[i]]);
    if(flag!=0) printf("\n");
    printf("%s\t", f2[id[i]]);
    };
    };

    main()
    {
    fedos();
    };
     
  2. ixoyz

    ixoyz Member

    Регистрация:
    12 май 2012
    Сообщения:
    16
    Симпатии:
    0
    Ошибка во втором цикле сортировки
    Код (C++):
    for(i=0;i<x-1;i++)
    {
    strcpy(str, f2[id[i]]);
    idmin=i;
    for(j=i+1;j<x;j++)
    {
    flag=srav(str, f2[id[j]]);
    if(flag==1)//т.е строка в массиве больше минимума
    {
    strcpy(str, f2[id[j]]);
    idmin=j;
    };
    };
    z=id[i];
    id[i]=id[idmin];
    id[idmin]=z;
    };
     
Загрузка...
Похожие Темы - Сортировка (си)
  1. vera2014
    Ответов:
    0
    Просмотров:
    1.073
  2. Liori
    Ответов:
    2
    Просмотров:
    1.006
  3. FCDK
    Ответов:
    0
    Просмотров:
    1.266
  4. ленарано
    Ответов:
    1
    Просмотров:
    1.105
  5. Creder
    Ответов:
    0
    Просмотров:
    1.347
Статус темы:
Закрыта.

Поделиться этой страницей