Guest User

Untitled

a guest
Jan 11th, 2018
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 12.96 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <cstdlib>
  4. #include <algorithm>
  5. #include <ctime>
  6. #include <chrono>
  7. #include <fstream>
  8. using namespace std;
  9.  
  10.  
  11.  
  12. void selectionSort(vector<int> &wektor, int n) //nie bede sie rozwodzil nad dzialaniem algorytmow sortujacych bo to by zajelo 30 minut a to wiedza dostepna w sekunde w google
  13. {
  14. int vecsize = wektor.size(); //wielkosc vectora
  15. for (int j = 0; j < vecsize - 1; ++j) {
  16.  
  17. int min = j;
  18. for (int i = j + 1; i < vecsize; ++i) {
  19. if (wektor.at(min) > wektor.at(i)) {
  20. min = i;
  21. }
  22.  
  23. }
  24. if (min != j)
  25. swap(wektor.at(j), wektor.at(min));
  26. }
  27. }
  28.  
  29.  
  30. void SortowaniePrzezZlicznie(vector<int> &wektor, int sz) { //nie bede sie rozwodzil nad dzialaniem algorytmow sortujacych bo to by zajelo 30 minut a to wiedza dostepna w sekunde w google
  31. int i, j, k;
  32. int idx = 0;
  33. int min, max;
  34.  
  35. min = max = wektor.at(0);
  36. for (i = 1; i < sz; i++) {
  37. min = (wektor.at(i) < min) ? wektor.at(i) : min; //skrocona forma if else..
  38. max = (wektor.at(i) > max) ? wektor.at(i) : max;
  39. }
  40.  
  41. k = max - min + 1;
  42.  
  43. int *B = new int[k];
  44. for (i = 0; i < k; i++) B[i] = 0;
  45.  
  46. for (i = 0; i < sz; i++) {
  47. B[wektor.at(i) - min]++;
  48. }
  49.  
  50. for (i = min; i <= max; i++) {
  51. for (j = 0; j < B[i - min]; j++) wektor.at(idx++) = i;
  52. }
  53.  
  54. delete[] B;
  55. }
  56.  
  57. int max_liczba(vector<int> wejscie, int rozmiar) // zwrocenie max liczby z vectora
  58. {
  59. int max = wejscie.at(0);
  60. for (int i = 1; i < rozmiar; i++) //szukanie maxa
  61. {
  62. if (max < wejscie.at(i))
  63. max = wejscie.at(i);
  64. }
  65. return max;
  66. }
  67.  
  68.  
  69.  
  70.  
  71. int qsort_rozdzielanie(std::vector<int> &arr, const int left, const int right) //podzial vectora quicksorta
  72. {
  73. const int mid = left + (right - left) / 2;
  74. const int pivot = arr[mid];
  75.  
  76. std::swap(arr[mid], arr[left]);
  77. int i = left + 1;
  78. int j = right;
  79. while (i <= j)
  80. {
  81. while (i <= j && arr[i] <= pivot)
  82. i++;
  83.  
  84. while (i <= j && arr[j] > pivot)
  85. j--;
  86.  
  87. if (i < j)
  88. std::swap(arr[i], arr[j]);
  89. }
  90. std::swap(arr[i - 1], arr[left]);
  91. return i - 1;
  92. }
  93.  
  94. void qsort(std::vector<int> &arr, const int left, const int right) //nie bede sie rozwodzil nad dzialaniem algorytmow sortujacych bo to by zajelo 30 minut a to wiedza dostepna w sekunde w google
  95. {
  96. if (left >= right) return;
  97. int podzial = qsort_rozdzielanie(arr, left, right);
  98. qsort(arr, left, podzial - 1);
  99. qsort(arr, podzial + 1, right);
  100. }
  101.  
  102. void my_qsort(std::vector<int> &arr)
  103. {
  104. qsort(arr, 0, arr.size() - 1);
  105. }
  106.  
  107. void WybierzZbiorA(vector<int> &ZbiorA) { //wypelnia vektor ze zbioru podanego w wymaganiach projektu
  108. ZbiorA.erase(ZbiorA.begin(), ZbiorA.end()); ZbiorA.clear();
  109. for (int i = 0; i <= 100000; i++) {
  110. ZbiorA.push_back(rand() % 100000);
  111. }
  112.  
  113. }
  114.  
  115. void WybierzZbiorA10000(vector<int> &ZbiorA) { //wypelnia vektor ze zbioru podanego w wymaganiach projektu
  116. ZbiorA.erase(ZbiorA.begin(), ZbiorA.end()); ZbiorA.clear();
  117. for (int i = 0; i <= 10000; i++) {
  118. ZbiorA.push_back(rand() % 10000);
  119. }
  120.  
  121. }
  122.  
  123. void WybierzZbiorB(vector<int> &ZbiorB) { //wypelnia vektor ze zbioru podanego w wymaganiach projektu
  124. ZbiorB.erase(ZbiorB.begin(), ZbiorB.end()); ZbiorB.clear();
  125. ZbiorB.push_back(100000);
  126. for (int i = 1; i <= 99999; i++) {
  127. ZbiorB.push_back(i);
  128. }
  129. ZbiorB.push_back(0);
  130. }
  131.  
  132. void WybierzZbiorB10000(vector<int> &ZbiorB) { //wypelnia vektor ze zbioru podanego w wymaganiach projektu
  133. ZbiorB.erase(ZbiorB.begin(), ZbiorB.end()); ZbiorB.clear();
  134. ZbiorB.push_back(10000);
  135. for (int i = 1; i <= 9999; i++) {
  136. ZbiorB.push_back(i);
  137. }
  138. ZbiorB.push_back(0);
  139. }
  140.  
  141. void WybierzZbiorC(vector<int> &ZbiorA) { //wypelnia vektor ze zbioru podanego w wymaganiach projektu
  142. ZbiorA.erase(ZbiorA.begin(), ZbiorA.end()); ZbiorA.clear();
  143. for (int i = 100000; i >= 0; i--) {
  144. ZbiorA.push_back(i);
  145. }
  146.  
  147. }
  148.  
  149.  
  150. void WybierzZbiorC10000(vector<int> &ZbiorA) { //wypelnia vektor ze zbioru podanego w wymaganiach projektu
  151. ZbiorA.erase(ZbiorA.begin(), ZbiorA.end()); ZbiorA.clear();
  152. for (int i = 10000; i >= 0; i--) {
  153. ZbiorA.push_back(i);
  154. }
  155.  
  156. }
  157.  
  158. void CombineAll() {
  159. fstream file; //tworzy uchwyt do pliku
  160. file.open("wynik.txt", std::ios::app); //otwieranie pliku w trybie append czyli dopisywania tekstu
  161.  
  162. vector<int> dane; //vector w ktorym beda przechowywane randomowe liczby
  163. WybierzZbiorA(dane); //wypelnienie vectora danym zbiorem
  164. std::cout << "Zbior a:\n";
  165. file << "Zbior a:\n"; //zapis do pliku tekstu
  166. std::cout << "\n\tRozpoczecie QuickSort\n";
  167. std::chrono::steady_clock::time_point begin = std::chrono::steady_clock::now(); //start licznika do mierzenia czasu algorytmu
  168. my_qsort(dane); //wykonanie funkcji sortujacej
  169. std::chrono::steady_clock::time_point end = std::chrono::steady_clock::now(); //stop stopera
  170. std::cout << "\t Czas = " << std::chrono::duration_cast<std::chrono::milliseconds>(end - begin).count() <<"ms"<< std::endl; //obliczanie i wypisanie czasu wykonania
  171. file << "\tCzas quicksort : ";
  172. file << std::chrono::duration_cast<std::chrono::milliseconds>(end - begin).count(); //zapis do pliku....
  173. file << "ms\n";
  174. std::cout << "\tZakonczenie QuickSort";
  175. //TO SAMO CO WYŻEJ TYLKO DLA INNYCH ALGORYTMOW
  176. std::cout << "\n\tRozpoczecie sortowania przez zliczanie\n";
  177. begin = std::chrono::steady_clock::now();
  178. WybierzZbiorA(dane);
  179. SortowaniePrzezZlicznie(dane, dane.size());
  180. end = std::chrono::steady_clock::now();
  181. std::cout << "\t Czas = " << std::chrono::duration_cast<std::chrono::milliseconds>(end - begin).count() << "ms" << std::endl;
  182. file << "\tCzas sortowania przez zliczanie : ";
  183. file << std::chrono::duration_cast<std::chrono::milliseconds>(end - begin).count();
  184. file << "ms\n";
  185. std::cout << "\tZakonczenie sortowania przez zliczanie\n";
  186.  
  187. std::cout << "\n\tRozpoczecie sortowania przez wybor (10 000 elementow poniewaz 100 000 trwa zbyt dlugo)\n";
  188. begin = std::chrono::steady_clock::now();
  189. WybierzZbiorA10000(dane);
  190. selectionSort(dane, dane.size());
  191. end = std::chrono::steady_clock::now();
  192. std::cout << "\t Czas = " << std::chrono::duration_cast<std::chrono::milliseconds>(end - begin).count() << "ms" << std::endl;
  193. file << "\tCzas sortowania przez wybor (10 000 elementow) : ";
  194. file << std::chrono::duration_cast<std::chrono::milliseconds>(end - begin).count();
  195. file << "ms\n";
  196. std::cout << "\tZakonczenie sortowania przez wybor\n";
  197.  
  198. std::cout << "\n\tRozpoczecie sortowania domyslnego\n";
  199. begin = std::chrono::steady_clock::now();
  200. WybierzZbiorA(dane);
  201. std::sort(dane.begin(), dane.end());
  202. end = std::chrono::steady_clock::now();
  203. std::cout << "\t Czas = " << std::chrono::duration_cast<std::chrono::milliseconds>(end - begin).count() << "ms" << std::endl;
  204. file << "\tCzas sortowania domyslnego : ";
  205. file << std::chrono::duration_cast<std::chrono::milliseconds>(end - begin).count();
  206. file << "ms\n";
  207. std::cout << "\tZakonczenie sortowania domyslnego\n\n";
  208.  
  209. std::cout << "\nZbior b:\n";
  210. file << "\nZbior b:\n";
  211. WybierzZbiorB(dane);
  212. std::cout << "\n\tRozpoczecie QuickSort\n";
  213. begin = std::chrono::steady_clock::now();
  214. my_qsort(dane);
  215. end = std::chrono::steady_clock::now();
  216. std::cout << "\t Czas = " << std::chrono::duration_cast<std::chrono::milliseconds>(end - begin).count() <<"ms"<< std::endl;
  217. file << "\tCzas quicksort : ";
  218. file << std::chrono::duration_cast<std::chrono::milliseconds>(end - begin).count();
  219. file << "ms\n";
  220. std::cout << "\tZakonczenie QuickSort\n";
  221.  
  222. std::cout << "\n\tRozpoczecie sortowania przez zliczanie\n";
  223. begin = std::chrono::steady_clock::now();
  224. WybierzZbiorB(dane);
  225. SortowaniePrzezZlicznie(dane, dane.size());
  226. end = std::chrono::steady_clock::now();
  227. std::cout << "\t Czas = " << std::chrono::duration_cast<std::chrono::milliseconds>(end - begin).count() <<"ms"<< std::endl;
  228. file << "\tCzas sortowania przez zliczanie : ";
  229. file << std::chrono::duration_cast<std::chrono::milliseconds>(end - begin).count();
  230. file << "ms\n";
  231. std::cout << "\tZakonczenie sortowania przez zliczanie\n";
  232.  
  233. std::cout << "\n\tRozpoczecie sortowania przez wybor (10 000 elementow bo 100 000 za dlugo trwa)\n";
  234. begin = std::chrono::steady_clock::now();
  235. WybierzZbiorB10000(dane);
  236. selectionSort(dane, dane.size());
  237. end = std::chrono::steady_clock::now();
  238. std::cout << "\t Czas = " << std::chrono::duration_cast<std::chrono::milliseconds>(end - begin).count() <<"ms"<< std::endl;
  239. file << "\tCzas sortowania przez wybor (10 000 elementow) : ";
  240. file << std::chrono::duration_cast<std::chrono::milliseconds>(end - begin).count();
  241. file << "ms\n";
  242. std::cout << "\tZakonczenie sortowania przez wybor\n";
  243.  
  244. std::cout << "\n\tRozpoczecie sortowania domyslnego\n";
  245. begin = std::chrono::steady_clock::now();
  246. WybierzZbiorB(dane);
  247. std::sort(dane.begin(), dane.end());
  248. end = std::chrono::steady_clock::now();
  249. std::cout << "\t Czas = " << std::chrono::duration_cast<std::chrono::milliseconds>(end - begin).count() <<"ms"<< std::endl;
  250. file << "\tCzas sortowania domyslnego: ";
  251. file << std::chrono::duration_cast<std::chrono::milliseconds>(end - begin).count();
  252. file << "ms\n";
  253. std::cout << "\tZakonczenie sortowania domyslnego\n\n";
  254.  
  255.  
  256. std::cout << "Zbior C:\n";
  257. file << "\nZbior c:\n";
  258. std::cout << "\n\tRozpoczecie QuickSort\n";
  259. WybierzZbiorC(dane);
  260. begin = std::chrono::steady_clock::now();
  261. my_qsort(dane);
  262. end = std::chrono::steady_clock::now();
  263. std::cout << "\t Czas = " << std::chrono::duration_cast<std::chrono::milliseconds>(end - begin).count() <<"ms"<< std::endl;
  264. file << "\tCzas quicksort: ";
  265. file << std::chrono::duration_cast<std::chrono::milliseconds>(end - begin).count();
  266. file << "ms\n";
  267. std::cout << "\tZakonczenie QuickSort\n";
  268.  
  269. std::cout << "\n\tRozpoczecie sortowania przez zliczanie\n";
  270. begin = std::chrono::steady_clock::now();
  271. WybierzZbiorC(dane);
  272. SortowaniePrzezZlicznie(dane, dane.size());
  273. end = std::chrono::steady_clock::now();
  274. std::cout << "\t Czas = " << std::chrono::duration_cast<std::chrono::milliseconds>(end - begin).count() <<"ms"<< std::endl;
  275. file << "\tCzas sortowania przez zliczanie: ";
  276. file << std::chrono::duration_cast<std::chrono::milliseconds>(end - begin).count();
  277. file << "ms\n";
  278. std::cout << "\tZakonczenie sortowania przez zliczanie\n";
  279.  
  280. std::cout << "\n\tRozpoczecie sortowania przez wybor (10 000 bo 100 000 za dlugo trwa)\n";
  281. begin = std::chrono::steady_clock::now();
  282. WybierzZbiorC10000(dane);
  283. selectionSort(dane, dane.size());
  284. end = std::chrono::steady_clock::now();
  285. std::cout << "\t Czas = " << std::chrono::duration_cast<std::chrono::milliseconds>(end - begin).count() <<"ms"<< std::endl;
  286. file << "\tCzas sortowania przez wybor (10 000 elementow): ";
  287. file << std::chrono::duration_cast<std::chrono::milliseconds>(end - begin).count();
  288. file << "ms\n";
  289. std::cout << "\tZakonczenie sortowania przez wybor\n";
  290.  
  291. std::cout << "\n\tRozpoczecie sortowania domyslnego\n";
  292. begin = std::chrono::steady_clock::now();
  293. WybierzZbiorC(dane);
  294. std::sort(dane.begin(), dane.end());
  295. end = std::chrono::steady_clock::now();
  296. file << "\tCzas sortowania domyslnego: ";
  297. file << std::chrono::duration_cast<std::chrono::milliseconds>(end - begin).count();
  298. file << "ms\n";
  299. std::cout << "\t Czas = " << std::chrono::duration_cast<std::chrono::milliseconds>(end - begin).count() <<"ms"<< std::endl;
  300. std::cout << "\tZakonczenie sortowania domyslnego";
  301.  
  302. file.close();
  303.  
  304. }
  305.  
  306. int main()
  307. {
  308. srand(time(NULL));
  309. vector<int> Zbior;
  310.  
  311. int choose;
  312. cout << "Wybierz sortowanie: \n\n\t0.Wszystkie kombinacje + podsumowanie czasu w pliku txt\n\n\tZbior A: \n\t\t1.Quick sort\n\t\t2.Counting sort\n\t\t3.Sortowanie przez wybor\n\t\t4.Sortowanie domyslne";
  313. cout << "\n\tZbior B : \n\t\t5.Quick sort\n\t\t6.Counting sort\n\t\t7.Sortowanie przez wybor\n\t\t8.Sortowanie domyslne";
  314. cout << "\n\tZbior C : \n\t\t9.Quick sort\n\t\t10.Counting sort\n\t\t11.Sortowanie przez wybor\n\t\t12.Sortowanie domyslne\n\t-->";
  315.  
  316.  
  317. cin >> choose; //proste menu
  318. switch (choose) {
  319. case 0:
  320. CombineAll();
  321. break;
  322. case 1:
  323. WybierzZbiorA(Zbior);
  324. my_qsort(Zbior);
  325. break;
  326. case 2:
  327. WybierzZbiorA(Zbior);
  328. SortowaniePrzezZlicznie(Zbior, Zbior.size());
  329. break;
  330. case 3:
  331. WybierzZbiorA(Zbior);
  332. selectionSort(Zbior, Zbior.size());
  333. break;
  334. case 4:
  335. WybierzZbiorA(Zbior);
  336. std::sort(Zbior.begin(), Zbior.end());
  337. break;
  338. case 5:
  339. WybierzZbiorB(Zbior);
  340. my_qsort(Zbior);
  341. break;
  342. case 6:
  343. WybierzZbiorB(Zbior);
  344. SortowaniePrzezZlicznie(Zbior, Zbior.size());
  345. break;
  346. case 7:
  347. WybierzZbiorB(Zbior);
  348. selectionSort(Zbior, Zbior.size());
  349. break;
  350. case 8:
  351. WybierzZbiorB(Zbior);
  352. std::sort(Zbior.begin(), Zbior.end());
  353. break;
  354. case 9:
  355. WybierzZbiorC(Zbior);
  356. my_qsort(Zbior); //quicksort
  357. break;
  358. case 10:
  359. WybierzZbiorC(Zbior);
  360. SortowaniePrzezZlicznie(Zbior, Zbior.size()); //...
  361. break;
  362. case 11:
  363. WybierzZbiorC(Zbior);
  364. selectionSort(Zbior, Zbior.size()); //sortowanie przez wybor
  365. break;
  366. case 12:
  367. WybierzZbiorC(Zbior);
  368. std::sort(Zbior.begin(), Zbior.end()); //defaultowa funkcja sortujaca
  369. break;
  370. }
  371.  
  372.  
  373.  
  374. //for (int i = 0; i < Zbior.size(); i++)
  375. //std::cout << Zbior.at(i) << " ,";
  376.  
  377. system("pause");
  378. return 0;
  379. }
Advertisement
Add Comment
Please, Sign In to add comment