#include <iostream>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
//przeklejone sortowanie ze strony
//http://www.java2s.com/Code/C/Data-Structure-Algorithm/TheQuicksort.htm
void quickSort(char *items, int left, int right)
{
int i, j;
char x, y;
i = left;
j = right;
x = items[(left+right)/2];
do {
while((items[i] < x) && (i < right))
i++;
while((x < items[j]) && (j > left))
j--;
if(i <= j) {
y = items[i];
items[i] = items[j];
items[j] = y;
i++; j--;
}
} while(i <= j);
if(i < right)
quickSort(items, i, right);
if(left < j)
quickSort(items, left, j);
}
void quickSortMain(char *items, int count)
{
quickSort(items, 0, count-1);
}
int main()
{
//Zapisanie tekstu do pliku tren.txt
FILE *fp;
char tekst[] = "filefilefile";
if((fp=fopen("C:\\tren.txt","w"))==NULL)
{
printf("Nie moge otworzyc pliku!.");
exit(1);
}
fprintf(fp, "%s", tekst);
fclose(fp);
//Rozmiar pliku
fp=NULL;
fpos_t dlugosc;
if((fp=fopen("C:\\tren.txt","rb"))==NULL)
{
printf("Blad otwarcia pliku.");
exit(1);
}
fseek(fp,0,SEEK_END);
fgetpos( fp, &dlugosc );
fseek(fp,0,SEEK_SET);
printf("Rozmiar pliku: %d bajtow.\n",dlugosc);
fclose(fp);
//Wczytanie znakow z pliku tren.txt do tablicy dynamicznej.
char *bufor = (char *)malloc(dlugosc * sizeof(char));
fp = NULL;
int znak;
if((fp=fopen("C:\\tren.txt","r"))==NULL)
{
printf("Blad otwarcia pliku.");
exit(1);
}
int licznik=0;
do
{
znak=fgetc(fp);
bufor[licznik]=(char)znak;
++licznik;
}while(znak!=EOF);
//Mamy juz w buforze znaki, trzeba je posortować - quicksort
cout<<"\nPrzed sortowaniem: \n";
for(int z=0; z<dlugosc; z++)
cout<<bufor[z];
quickSortMain(bufor, dlugosc);
cout<<"\nPo sortowaniu: \n";
for(int z=0; z<dlugosc; z++)
cout<<bufor[z];
fclose(fp);
free(bufor);
return 0;
}