Посмотрите пожалуйста. У меня почему-то самая обычная сортировка не работает. Бред какой-то.
у меня объявлена такая структура
#define MAX 100 struct addr { char name[10]; char surname[20]; char patronymic[30]; char address[40]; char telephone[20]; } addr_list[MAX];
затем выбирается сортировка (по убыванию/по возрастанию)
void COPTIPOBKA(void) { char i[2]; int d; textcolor(WHITE); printf("\n\rIf you wish to sort on decrease press 1 else press 0: \n\r"); gets(i); d=atoi(i); switch (d) { case 1: COPTIPOBKA_on_decrease(); break; case 0: COPTIPOBKA_on_increase(); break; } clrscr(); return; }
эта функция я использую, чтобы знать сколько записей уже внесено
int find_free(void) {register int t; for(t=0; addr_list[t].name[0] && t<MAX; ++t); if (t==MAX) return -1; return t; }
И вот эти две бредовые сортировки:
void COPTIPOBKA_on_increase() {int k1,l1,i,slot; char s[50]; char l[50]; char l2[50]; char l3[50]; char l4[50]; slot=find_free(); for (k1=0; k1<=slot; k1++) { for(l1=1; l1<slot; l1++) { if (addr_list[l1].name>addr_list[k1].name) { strcpy(s,addr_list[k1].name); strcpy(l,addr_list[k1].surname); strcpy(l2,addr_list[k1].patronymic); strcpy(l3,addr_list[k1].address); strcpy(l4,addr_list[k1].telephone); strcpy(addr_list[k1].name,addr_list[l1].name); strcpy(addr_list[k1].surname, addr_list[l1].surname); strcpy(addr_list[k1].patronymic,addr_list[l1].patronymic); strcpy(addr_list[k1].address,addr_list[l1].address); strcpy(addr_list[k1].telephone,addr_list[l1].telephone); strcpy(addr_list[l1].name,s); strcpy(addr_list[l1].surname,l); strcpy(addr_list[l1].patronymic,l2); strcpy(addr_list[l1].address,l3); strcpy(addr_list[l1].telephone,l4); } } } } void COPTIPOBKA_on_decrease() { {int k1,l1,i,slot; char s[50]; char l[50]; char l2[50]; char l3[50]; char l4[50]; slot=find_free(); for (k1=0; k1<=slot; k1++) { for(l1=1; l1<slot; l1++) { if (addr_list[l1].name<addr_list[k1].name) { strcpy(s,addr_list[l1].name); strcpy(l,addr_list[l1].surname); strcpy(l2,addr_list[l1].patronymic); strcpy(l3,addr_list[l1].address); strcpy(l4,addr_list[l1].telephone); strcpy(addr_list[l1].name,addr_list[k1].name); strcpy(addr_list[l1].surname, addr_list[k1].surname); strcpy(addr_list[l1].patronymic,addr_list[k1].patronymic); strcpy(addr_list[l1].address,addr_list[k1].address); strcpy(addr_list[l1].telephone,addr_list[k1].telephone); strcpy(addr_list[k1].name,s); strcpy(addr_list[k1].surname,l); strcpy(addr_list[k1].patronymic,l2); strcpy(addr_list[k1].address,l3); strcpy(addr_list[k1].telephone,l4); } } } } }
"Один со всеми" так вроде называется. Неправильно реализовала я ее как-то.
Сообщение отредактировано: Тёмный Эльф - 18.05.2007 0:18