#include <iostream>
#include <stdlib.h>
#include <ctime>
#include <windows.h>
using namespace std;
void TabMirror(int tab1[], int tab2[], int s) //kopiowanie z tab1 do tab2
{
for (int i = 0; i < s; ++i)
{
tab2[i] = tab1[i];
}
}
void display(int tab1[], int tab2[], int s) //wyswietlanie tablic
{
for (int i = 0; i < s; ++i)
{
cout << "tablica1: " << tab1[i] << "\t\ttablica2: " << tab2[i] << endl;
}
}
void quicksort(int tab2[], int left, int right)
{
int v=tab2[(left+right)/2];
int i,j,x;
i=left;
j=right;
do
{
while (tab2[i]<v) i++;
while (tab2[j]>v) j--;
if (i<=j)
{
x=tab2[i];
tab2[i]=tab2[j];
tab2[j]=x;
i++;
j--;
}
}
while (i<=j);
if (j>left) quicksort(tab2,left, j);
if (i<right) quicksort(tab2, i, right);
}
void InsertSort( int tab2[], int s )
{
SYSTEMTIME st;
GetSystemTime(&st);
int t1=st.wMinute;
int t2=st.wSecond;
int t3= st.wMilliseconds;
int temp, k;
for( int i = 1; i < s; i++ )
{
temp = tab2[ i ];
for( k = i - 1; k >= 0 && tab2[ k ] > temp; k-- )
tab2[ k + 1 ] = tab2[ k ];
tab2[ k + 1 ] = temp;
}
GetSystemTime(&st);
cout <<"InsertSort: " << st.wSecond-t2;
if(st.wMilliseconds-t3<0)
{
cout << " seconds " << (st.wMilliseconds-t3)*(-1) << " ms."<< endl;;
}
else
cout << " seconds " << st.wMilliseconds-t3 << " ms."<< endl;
}
void SelectionSort(int tab2[], int s)
{
SYSTEMTIME st;
GetSystemTime(&st);
int t1=st.wMinute;
int t2=st.wSecond;
int t3= st.wMilliseconds;
int j,k;
for(int i = 0; i < s; i++ )
{
k = i;
for( int j = i + 1; j < s; j++ )
if( tab2[ j ] < tab2[ k ] )
k = j;
swap( tab2[ k ], tab2[ i ] );
}
GetSystemTime(&st);
cout <<"SelectionSort: " << st.wSecond-t2;
if(st.wMilliseconds-t3<0)
{
cout << " seconds " << (st.wMilliseconds-t3)*(-1) << " ms."<< endl;;
}
else
cout << " seconds " << st.wMilliseconds-t3 << " ms."<< endl;
}
void BubbleSort (int tab2[], int s)
{
SYSTEMTIME st;
GetSystemTime(&st);
int t1=st.wMinute;
int t2=st.wSecond;
int t3= st.wMilliseconds;
int k;
for(int i = 0; i < s; i++ )
{
for(k = s; k>=0-1; k-- )
{
if( tab2[k]>tab2[k+1])
swap(tab2[k],tab2[k+1]);
}
}
GetSystemTime(&st);
cout <<"BubbleSort: " << st.wSecond-t2;
if(st.wMilliseconds-t3<0)
{
cout << " seconds " << (st.wMilliseconds-t3)*(-1) << " ms."<< endl;;
}
else
cout << " seconds " << st.wMilliseconds-t3 << " ms."<< endl;
}
int main()
{
//int s = 5000; //size
int s;
cout << "Compare sorting algorithms efficiency!" << endl << "Press ENTER to continue." << endl;
cin.get();
cout << "Insert array size (recomended 5000 - 100000)" << endl;
cin >> s;
int tab1[s], tab2[s];
//2x random array
srand((unsigned)time(0));
for(int i=0; i<s; i++)
{
tab1[i] = (rand()%1000)+1;
tab2[i]=tab1[i];
}
//SelectionSort
SelectionSort(tab2,s);
//copy array
TabMirror(tab1,tab2,s);
//bubble
BubbleSort(tab2,s);
//copy array
TabMirror(tab1,tab2,s);
//sortowanie szybkie
SYSTEMTIME st;
GetSystemTime(&st);
int t2=st.wSecond;
int t3=st.wMilliseconds;
quicksort(tab2,0,s-1);
GetSystemTime(&st);
cout <<"QuickSort: " << st.wSecond-t2 << " seconds " << st.wMilliseconds-t3 << " ms."<< endl;
//copy array
TabMirror(tab1,tab2,s);
//InsertSort
InsertSort(tab2,s);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RkbGliLmg+CiNpbmNsdWRlIDxjdGltZT4KI2luY2x1ZGUgPHdpbmRvd3MuaD4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp2b2lkIFRhYk1pcnJvcihpbnQgdGFiMVtdLCBpbnQgdGFiMltdLCBpbnQgcykgLy9rb3Bpb3dhbmllIHogdGFiMSBkbyB0YWIyCnsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgczsgKytpKQogICAgewogICAgICAgIHRhYjJbaV0gPSB0YWIxW2ldOwogICAgfQp9Cgp2b2lkIGRpc3BsYXkoaW50IHRhYjFbXSwgaW50IHRhYjJbXSwgaW50IHMpIC8vd3lzd2lldGxhbmllIHRhYmxpYwp7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHM7ICsraSkKICAgIHsKICAgICAgICBjb3V0IDw8ICJ0YWJsaWNhMTogIiA8PCB0YWIxW2ldIDw8ICJcdFx0dGFibGljYTI6ICIgPDwgdGFiMltpXSA8PCBlbmRsOwogICAgfQp9Cgp2b2lkIHF1aWNrc29ydChpbnQgdGFiMltdLCBpbnQgbGVmdCwgaW50IHJpZ2h0KQp7CgogICAgaW50IHY9dGFiMlsobGVmdCtyaWdodCkvMl07CiAgICBpbnQgaSxqLHg7CiAgICBpPWxlZnQ7CiAgICBqPXJpZ2h0OwogICAgZG8KICAgIHsKICAgICAgICB3aGlsZSAodGFiMltpXTx2KSBpKys7CiAgICAgICAgd2hpbGUgKHRhYjJbal0+dikgai0tOwogICAgICAgIGlmIChpPD1qKQogICAgICAgIHsKICAgICAgICAgICAgeD10YWIyW2ldOwogICAgICAgICAgICB0YWIyW2ldPXRhYjJbal07CiAgICAgICAgICAgIHRhYjJbal09eDsKICAgICAgICAgICAgaSsrOwogICAgICAgICAgICBqLS07CiAgICAgICAgfQogICAgfQogICAgd2hpbGUgKGk8PWopOwogICAgaWYgKGo+bGVmdCkgcXVpY2tzb3J0KHRhYjIsbGVmdCwgaik7CiAgICBpZiAoaTxyaWdodCkgcXVpY2tzb3J0KHRhYjIsIGksIHJpZ2h0KTsKCn0KCnZvaWQgSW5zZXJ0U29ydCggaW50IHRhYjJbXSwgaW50IHMgKQp7CiAgICBTWVNURU1USU1FIHN0OwogICAgR2V0U3lzdGVtVGltZSgmc3QpOwogICAgaW50IHQxPXN0LndNaW51dGU7CiAgICBpbnQgdDI9c3Qud1NlY29uZDsKICAgIGludCB0Mz0gc3Qud01pbGxpc2Vjb25kczsKICAgIGludCB0ZW1wLCBrOwogICAgZm9yKCBpbnQgaSA9IDE7IGkgPCBzOyBpKysgKQogICAgewogICAgICAgIHRlbXAgPSB0YWIyWyBpIF07CgogICAgICAgIGZvciggayA9IGkgLSAxOyBrID49IDAgJiYgdGFiMlsgayBdID4gdGVtcDsgay0tICkKICAgICAgICAgICAgdGFiMlsgayArIDEgXSA9IHRhYjJbIGsgXTsKCiAgICAgICAgdGFiMlsgayArIDEgXSA9IHRlbXA7CiAgICB9CiAgICBHZXRTeXN0ZW1UaW1lKCZzdCk7CiAgICAgICAgY291dCA8PCJJbnNlcnRTb3J0OiAiIDw8IHN0LndTZWNvbmQtdDI7CiAgICBpZihzdC53TWlsbGlzZWNvbmRzLXQzPDApCiAgICB7CiAgICAgICAgY291dCA8PCAiIHNlY29uZHMgIiA8PCAoc3Qud01pbGxpc2Vjb25kcy10MykqKC0xKSA8PCAiIG1zLiI8PCBlbmRsOzsKCiAgICB9CiAgICBlbHNlCiAgICAgICAgY291dCA8PCAiIHNlY29uZHMgIiA8PCBzdC53TWlsbGlzZWNvbmRzLXQzIDw8ICIgbXMuIjw8IGVuZGw7Cn0KCnZvaWQgU2VsZWN0aW9uU29ydChpbnQgdGFiMltdLCBpbnQgcykKewogICAgU1lTVEVNVElNRSBzdDsKICAgIEdldFN5c3RlbVRpbWUoJnN0KTsKICAgIGludCB0MT1zdC53TWludXRlOwogICAgaW50IHQyPXN0LndTZWNvbmQ7CiAgICBpbnQgdDM9IHN0LndNaWxsaXNlY29uZHM7CiAgICBpbnQgaixrOwogICAgZm9yKGludCBpID0gMDsgaSA8IHM7IGkrKyApCiAgICB7CiAgICAgICAgayA9IGk7CiAgICAgICAgZm9yKCBpbnQgaiA9IGkgKyAxOyBqIDwgczsgaisrICkKICAgICAgICAgICAgaWYoIHRhYjJbIGogXSA8IHRhYjJbIGsgXSApCiAgICAgICAgICAgICAgICBrID0gajsKICAgICAgICBzd2FwKCB0YWIyWyBrIF0sIHRhYjJbIGkgXSApOwogICAgfQogICAgR2V0U3lzdGVtVGltZSgmc3QpOwogICAgICAgIGNvdXQgPDwiU2VsZWN0aW9uU29ydDogIiA8PCBzdC53U2Vjb25kLXQyOwogICAgaWYoc3Qud01pbGxpc2Vjb25kcy10MzwwKQogICAgewogICAgICAgIGNvdXQgPDwgIiBzZWNvbmRzICIgPDwgKHN0LndNaWxsaXNlY29uZHMtdDMpKigtMSkgPDwgIiBtcy4iPDwgZW5kbDs7CgogICAgfQogICAgZWxzZQogICAgICAgIGNvdXQgPDwgIiBzZWNvbmRzICIgPDwgc3Qud01pbGxpc2Vjb25kcy10MyA8PCAiIG1zLiI8PCBlbmRsOwp9Cgp2b2lkIEJ1YmJsZVNvcnQgKGludCB0YWIyW10sIGludCBzKQoKewogICAgU1lTVEVNVElNRSBzdDsKICAgIEdldFN5c3RlbVRpbWUoJnN0KTsKICAgIGludCB0MT1zdC53TWludXRlOwogICAgaW50IHQyPXN0LndTZWNvbmQ7CiAgICBpbnQgdDM9IHN0LndNaWxsaXNlY29uZHM7CiAgICBpbnQgazsKICAgIGZvcihpbnQgaSA9IDA7IGkgPCBzOyBpKysgKQogICAgewogICAgICAgIGZvcihrID0gczsgaz49MC0xOyBrLS0gKQogICAgICAgIHsKICAgICAgICAgICAgaWYoIHRhYjJba10+dGFiMltrKzFdKQogICAgICAgICAgICAgICAgc3dhcCh0YWIyW2tdLHRhYjJbaysxXSk7CiAgICAgICAgfQogICAgfQogICAgR2V0U3lzdGVtVGltZSgmc3QpOwogICAgY291dCA8PCJCdWJibGVTb3J0OiAiIDw8IHN0LndTZWNvbmQtdDI7CiAgICBpZihzdC53TWlsbGlzZWNvbmRzLXQzPDApCiAgICB7CiAgICAgICAgY291dCA8PCAiIHNlY29uZHMgIiA8PCAoc3Qud01pbGxpc2Vjb25kcy10MykqKC0xKSA8PCAiIG1zLiI8PCBlbmRsOzsKCiAgICB9CiAgICBlbHNlCiAgICAgICAgY291dCA8PCAiIHNlY29uZHMgIiA8PCBzdC53TWlsbGlzZWNvbmRzLXQzIDw8ICIgbXMuIjw8IGVuZGw7Cn0KaW50IG1haW4oKQp7CiAgICAvL2ludCBzID0gNTAwMDsgLy9zaXplCiAgICBpbnQgczsKICAgIGNvdXQgPDwgIkNvbXBhcmUgc29ydGluZyBhbGdvcml0aG1zIGVmZmljaWVuY3khIiA8PCBlbmRsIDw8ICJQcmVzcyBFTlRFUiB0byBjb250aW51ZS4iIDw8IGVuZGw7CiAgICBjaW4uZ2V0KCk7CiAgICBjb3V0IDw8ICJJbnNlcnQgYXJyYXkgc2l6ZSAocmVjb21lbmRlZCA1MDAwIC0gMTAwMDAwKSIgPDwgZW5kbDsKICAgIGNpbiA+PiBzOwogICAgaW50IHRhYjFbc10sIHRhYjJbc107CiAgICAvLzJ4IHJhbmRvbSBhcnJheQogICAgc3JhbmQoKHVuc2lnbmVkKXRpbWUoMCkpOwogICAgZm9yKGludCBpPTA7IGk8czsgaSsrKQogICAgewogICAgICAgIHRhYjFbaV0gPSAocmFuZCgpJTEwMDApKzE7CiAgICAgICAgdGFiMltpXT10YWIxW2ldOwogICAgfQogICAgLy9TZWxlY3Rpb25Tb3J0CiAgICBTZWxlY3Rpb25Tb3J0KHRhYjIscyk7CiAgICAvL2NvcHkgYXJyYXkKICAgIFRhYk1pcnJvcih0YWIxLHRhYjIscyk7CiAgICAvL2J1YmJsZQogICAgQnViYmxlU29ydCh0YWIyLHMpOwogICAgLy9jb3B5IGFycmF5CiAgICBUYWJNaXJyb3IodGFiMSx0YWIyLHMpOwogICAgLy9zb3J0b3dhbmllIHN6eWJraWUKICAgICAgICBTWVNURU1USU1FIHN0OwogICAgR2V0U3lzdGVtVGltZSgmc3QpOwogICAgaW50IHQyPXN0LndTZWNvbmQ7CiAgICBpbnQgdDM9c3Qud01pbGxpc2Vjb25kczsKCiAgICBxdWlja3NvcnQodGFiMiwwLHMtMSk7CgogICAgR2V0U3lzdGVtVGltZSgmc3QpOwogICAgY291dCA8PCJRdWlja1NvcnQ6ICIgPDwgc3Qud1NlY29uZC10MiA8PCAiIHNlY29uZHMgIiA8PCBzdC53TWlsbGlzZWNvbmRzLXQzIDw8ICIgbXMuIjw8IGVuZGw7CiAgICAvL2NvcHkgYXJyYXkKICAgIFRhYk1pcnJvcih0YWIxLHRhYjIscyk7CiAgICAvL0luc2VydFNvcnQKICAgIEluc2VydFNvcnQodGFiMixzKTsKICAgIHJldHVybiAwOwp9Cg==