Advertisement
Guest User

Untitled

a guest
Jan 9th, 2014
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.52 KB | None | 0 0
  1. #include "stdafx.h"
  2. #include <iostream>
  3. #include <cstdlib>
  4. #include <time.h>
  5.  
  6.  
  7. using namespace std;
  8.  
  9. const int iloscElementow=10;
  10.  
  11.  
  12. struct ulamki
  13. {
  14. float licznik;
  15. float mianownik;
  16. };
  17.  
  18. void losuj(ulamki zbior[])
  19. {
  20. int i=0;
  21. srand( time( NULL ) );
  22. for(i=0;i<iloscElementow;++i)
  23. {
  24. zbior[i].licznik=rand()+1;
  25. zbior[i].mianownik=rand()+1;
  26.  
  27. }
  28. cout<<"Wylosowano "<<iloscElementow<<" elementow"<<endl;
  29. }
  30.  
  31. float wynik (ulamki element)
  32. {
  33. return element.licznik/element.mianownik;
  34. }
  35.  
  36.  
  37.  
  38.  
  39. void BubbleSort(ulamki * t, int n)
  40. {
  41. int i,j;
  42. ulamki temp;
  43. bool czy_posortowana = true;
  44.  
  45. for (j=0;j<n-1;j++){
  46. czy_posortowana = true;
  47. for (i=0;i<n-1-j;i++)
  48. if (wynik(t[i])>wynik(t[i+1]))
  49. {
  50. czy_posortowana = false;
  51. temp = t[i+1]; // zamiana elementow
  52. t[i+1] = t[i];
  53. t[i] = temp;
  54. }
  55. if (czy_posortowana == true) return;
  56. }
  57. }
  58.  
  59. void InsertionSort(ulamki *t, int n)
  60. {
  61. int i, j;
  62. ulamki temp;
  63. for (i=1;i<n;i++)
  64. {
  65. temp = t[i];
  66. j = i-1;
  67. while (j>=0 && wynik(t[j]) > wynik(temp))
  68. {
  69. t[j+1]=t[j];
  70. j--;
  71. }
  72. t[j+1]=temp;
  73. }
  74. }
  75.  
  76. void Merge(ulamki *t,int p, int sr, int k)
  77. {
  78. int i=sr+1,j=p,x=0,q=p;
  79. static ulamki tempTab[iloscElementow];
  80.  
  81. for (x=p;x<=k;x++)
  82. tempTab[x] = t[x];
  83.  
  84. while (j<=sr && i<=k){
  85. if (wynik(tempTab[j])>wynik(tempTab[i]))
  86. t[q++]=tempTab[i++];
  87. else
  88. t[q++]=tempTab[j++];
  89. }
  90.  
  91. while (j<=sr) t[q++]=tempTab[j++];
  92. }
  93.  
  94. void MergeSort(ulamki *t, int p, int k)
  95. {
  96. int sr = (p+k)/2;
  97. if (p<k) {
  98. MergeSort(t,p,sr);
  99. MergeSort(t,sr+1,k);
  100. Merge(t,p,sr,k);
  101. }
  102. }
  103.  
  104. void QuickSort(ulamki *t, int left, int right)
  105. {
  106. int i=left;
  107. int j=right;
  108. ulamki x=t[(left+right)/2];
  109. do{
  110. while(wynik(t[i])<wynik(x)) i++;
  111. while(wynik(t[j])>wynik(x)) j--;
  112. if(i<=j){
  113. ulamki temp=t[i];
  114. t[i]=t[j];
  115. t[j]=temp;
  116. i++;
  117. j--;
  118. }
  119. }while(i<=j);
  120. if(left<j) QuickSort(t,left,j);
  121. if(right>i) QuickSort(t,i,right);
  122. }
  123.  
  124.  
  125.  
  126. int _tmain(int argc, _TCHAR* argv[])
  127. {
  128. static ulamki dane[iloscElementow];
  129. static ulamki kopia[iloscElementow];
  130. unsigned long long start;
  131. unsigned long long koniec;
  132. int i;
  133. losuj(dane);
  134. //BubbleSort
  135. memcpy(kopia, dane, sizeof(ulamki) * iloscElementow );//tworzenie kopii
  136. start = clock();
  137. BubbleSort(kopia,iloscElementow);
  138. koniec =clock() - start;
  139. cout<<"Bubblesort dla "<<iloscElementow<<" trwal "<<koniec<<" ms"<<endl;
  140.  
  141. //InsertionSort
  142. memcpy(kopia, dane, sizeof(ulamki) * iloscElementow);
  143. start = clock();
  144. InsertionSort(kopia,iloscElementow);
  145. koniec =clock() - start;
  146. cout<<"Insertion Sort dla "<<iloscElementow<<" trwal "<<koniec<<" ms"<<endl;
  147.  
  148.  
  149. //MergeSort
  150. memcpy(kopia, dane, sizeof(ulamki) * iloscElementow);
  151. start = clock();
  152. MergeSort(kopia,0,iloscElementow-1);
  153. koniec =clock() - start;
  154. cout<<"Merge Sort dla "<<iloscElementow<<" trwal "<<koniec<<" ms"<<endl;
  155.  
  156.  
  157.  
  158. //QuickSort
  159. memcpy(kopia, dane, sizeof(ulamki) * iloscElementow);
  160. start = clock();
  161. QuickSort(kopia,0,iloscElementow-1);
  162. koniec =clock() - start;
  163. cout<<"Quick Sort dla "<<iloscElementow<<" trwal "<<koniec<<" ms"<<endl;
  164. /*for(i=0;i<iloscElementow;++i)
  165. {
  166. cout<<kopia[i].licznik/kopia[i].mianownik<<endl;
  167. }*/
  168.  
  169. return 0;
  170. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement