Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <time.h>
- #include <windows.h>
- using namespace std;
- char *pole;
- int dlzka;
- void bubble_sort(int, int);
- char generateChar(int min, int max) {
- return rand() % (max - min) + min;
- }
- int kolik_ms( LPFILETIME pred, LPFILETIME po )
- {
- hyper pred64b = pred->dwHighDateTime;
- pred64b = ( pred64b << 32 ) | pred->dwLowDateTime;
- hyper po64b = po->dwHighDateTime;
- po64b = ( po64b << 32 ) | po->dwLowDateTime;
- // konverze 100ns -> 1ms
- return ( int ) ( ( po64b - pred64b ) / 10000 );
- }
- DWORD WINAPI vlaknoA( LPVOID r)
- {
- int *r0 = (int *) r;
- printf( "Vlakno\n" );
- bubble_sort(r0[0],r0[1]);
- return 0;
- }
- void bubble_sort(int start, int end) {
- int tmp;
- for(int i = start; i < end; i++) {
- for(int j = start; j < end - (i-start) - 1; j++) {
- if (pole[j+1] > pole[j]) {
- tmp = pole[j+1];
- pole[j+1] = pole[j];
- pole[j] = tmp;
- }
- }
- }
- }
- void otoc_pole() {
- int tmp;
- for(int i = 0; i < dlzka/2; i++) {
- tmp = pole[dlzka-1-i];
- pole[dlzka-1-i] = pole[i];
- pole[i] = tmp;
- }
- }
- void spoj_pole() {
- char *novePole;
- int start = 0;
- int end = dlzka/2;
- int tmp1, tmp2;
- novePole = new char[dlzka];
- for(int i = 0; i < dlzka; i++) {
- if ((int)pole[start] > (int)pole[end]) {
- if (start == dlzka/2) {
- novePole[i] = pole[end++];
- }
- else {
- novePole[i] = pole[start++];
- }
- }
- else {
- if (end == dlzka) {
- novePole[i] = pole[start];
- }
- else {
- novePole[i] = pole[end++];
- }
- }
- }
- }
- int main() {
- FILETIME cas_pred, cas_po;
- HANDLE h1,h2,h3,h4;
- srand(time(NULL));
- int minimum = -60;
- int maximum = 10;
- dlzka = 10;
- pole = new char[dlzka];
- for(int i = 0; i < dlzka; i++) {
- pole[i] = generateChar(minimum, maximum);
- }
- printf("\nBubbleSort:\n");
- int r0[] = {0, dlzka/2};
- int r1[] = {dlzka/2, dlzka};
- GetSystemTimeAsFileTime ( &cas_pred );
- h1 = CreateThread(0, 0, vlaknoA, r0, 0, 0);
- h2 = CreateThread(0, 0, vlaknoA, r1, 0, 0);
- WaitForSingleObject( h1, INFINITE );
- WaitForSingleObject( h2, INFINITE );
- GetSystemTimeAsFileTime ( &cas_po );
- printf("Zotriedenie trvalo: %dms \n", kolik_ms(&cas_pred, &cas_po));
- spoj_pole();
- /*
- otoc_pole();
- GetSystemTimeAsFileTime ( &cas_pred );
- h3 = CreateThread(0, 0, vlaknoA, r0, 0, 0);
- h4 = CreateThread(0, 0, vlaknoA, r1, 0, 0);
- WaitForSingleObject( h3, INFINITE );
- WaitForSingleObject( h4, INFINITE );
- GetSystemTimeAsFileTime ( &cas_po );
- printf("Zotriedenie prevrateneho pola trvalo: %dms \n", kolik_ms(&cas_pred, &cas_po));
- */
- return 0;
- }
Add Comment
Please, Sign In to add comment