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

  • Автор темы d3fToR
  • Дата начала
Статус
Закрыто для дальнейших ответов.
D

d3fToR

#1
Такая проблема.. не могу сделать отладку, час сижу уже глаза мозолю, но не получается что-то. Программа компилируется без ошибок, но не сортируется в правильном порядке. Сначало сортирует буквы в слове, например, август - тсугва. И таких слов 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();
};
 

ixoyz

Member
12.05.2012
16
0
#2
Ошибка во втором цикле сортировки
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;
};
 
Статус
Закрыто для дальнейших ответов.