Witam miałem za zadanie przerobić program sortujący cyfry bubble sortem i insert sortem, na program sortujący wyrazy alfabetycznie coś nie pyka prosiłbym o pomoc, póki co programuje dosyć krótko.
Treść zadania
Zmodyfikować program, tak aby umożliwiał sortowanie alfabetyczne listy wyrazów w zadanej kolejności. Wskazówki:
listę wyrazów zdefiniować w kodzie programu jako tablicę char* nieposortowane[]={"basia", "zosia", "ala", "genowefa"};
do porównywania dwóch wyrazów użyć funkcji strcmp, której prototyp jest w pliku nagłówkowym string.h
porządek sortowania jest wybierany dodatkowym argumentem int porzadek przekazywanym do funkcji babelki i wstawianie: jeżeli porzadek>=0 to sortowanie jest w porządku rosnącym, w przeciwnym przypadku w porządku malejącym
zmodyfikować odpowiednio funkcje kopiuj i wypisz, aby przyjmowały jako pierwszy argument tablicę ciągów znakowych
Kod który udało mi się napisać
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
const int ROZMIAR=4;
const char* nieposortowane[]={"basia", "zosia", "ala", "genowefa"};
// funkcja porownujace dwa elementy typu string
int porownaj(char a[], char b[])
{
return strcmp(a, b);
}
// sortowanie babelkowe (ang. bubble sort)
void babelki(char* tablica[], int N)
{
int zamienione, i;
char* tmp;
do
{
zamienione=0; // jezeli nie bedzie zadnej zamiany, to tablica jest juz uporzadkowana
for(i=0;i<N-1;i++)
if(porownaj(tablica[i], tablica[i+1]))
{
// zamiana dwoch sasiednich elementow
tmp=tablica[i];
tablica[i]=tablica[i+1];
tablica[i+1]=tmp;
// tablica jeszcze nie jest uporzadkowana
zamienione=1;
}
}
while(zamienione);
}
// sortowanie przez wstawianie (ang. insertion sort)
void wstawianie(char* tablica[], int N)
{
int i, j;
char* tmp;
for(i=1; i<N; i++)
{
// elementy o indeksach 0 do i-1 sa juz uporzadkowane
tmp=tablica[i]; // wartosc i-tego elementu
// przesuwanie elementow tablica[j]<=tmp
j=i-1;
while(j>=0 && porownaj(tablica[j],tmp))
{
tablica[j+1]=tablica[j];
j--;
}
// wstawienie elementu (potrzebne jest dodanie 1 bo j bylo dekrementowane w linii 48)
tablica[j+1]=tmp;
}
}
// funkcja wypisujac N elementow z tablicy int
void wypisz(char* tablica[], int N)
{
int i=0;
for(i=0;i<N;i++)
printf("%s\n", *(tablica+i));
}
// funkcja kopiujace N elementw typu int
void kopiuj(char* skad[], char* dokad[] ,int N)
{
int i;
for(i=0;i<N; i++)
//*(dokad++)=*(skad++);
strcpy(*dokad, *skad);
}
int main()
{
char* tablica[ROZMIAR];
printf("Przed sortowaniem: \n");
wypisz(nieposortowane, ROZMIAR);
kopiuj(nieposortowane, tablica, ROZMIAR);
babelki(tablica, ROZMIAR);
printf("Po sortowaniu babelkowym: \n");
wypisz(tablica, ROZMIAR);
kopiuj(nieposortowane, tablica, ROZMIAR);
wstawianie(tablica, ROZMIAR);
printf("Po sortowaniu przez wstawianie: \n");
wypisz(tablica, ROZMIAR);
return 0;
}
Z góry dziękuje z pomoc