Advertisement
skalarr

6. cas

May 7th, 2022
1,084
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Julia 5.16 KB | None | 0 0
  1. #6.cas
  2. #Selection sort i Quick sort
  3.  
  4. #Selection sort
  5. #PSEUDOKOD
  6. Selection-Sort(A)
  7. n = length(A)
  8.     for i=1 to n-1
  9.  
  10.     min_idx = i
  11.  
  12.     for j=i+1 to n
  13.    
  14.     if A[j] < A[min_idx]
  15.  
  16.     min_idx = j
  17.  
  18.     temp = A[min_idx]
  19.  
  20.     A[min_idx]=A[i]
  21.  
  22.     A[i] = temp
  23. end
  24.  
  25. #redovan kod
  26. function selectionSort!(A)
  27.     n = length(A)
  28.     for i=1:n-1
  29.     minIdx = i
  30.     for j=i+1:n
  31.     if A[j] < A[minIdx]
  32.     minIdx = j
  33.     end
  34.     end
  35.     if i!=minIdx
  36.     A[[i minIdx]] = A[[minIdx i]];
  37.     end
  38.     end
  39. end
  40.  
  41. # Zadatak 6.1.
  42. #Implementirati Selection sort u Julia-i koji sortira elemente niza
  43. #brojeva u opadajućem redosledu. Pronaći najveću razliku između
  44. #dva susedna broja u sortiranom nizu
  45.  
  46. function selectionSort!(A)
  47.     n = length(A)
  48.     for i=1:n-1
  49.     minIdx = i
  50.         for j=i+1:n
  51.             if A[j] > A[minIdx]
  52.             minIdx = j
  53.             end
  54.         end
  55.         if i!=minIdx
  56.         A[[i minIdx]] = A[[minIdx i]];
  57.         end
  58.     end
  59. end
  60.  
  61. A=[7 4 5 2]
  62. selectionSort!(A)
  63. println("Sortirani niz izgleda ovako: $A")
  64. max_razlika = A[1]-A[2] #poredimo susedne
  65. n=length(A) #definisemo kraj
  66. for i=2:n-1
  67.     if A[i]-A[i+1] > max_razlika
  68.         max_razlika = A[i]-A[i+1]
  69.     end
  70. end
  71.  
  72. println("Najveca razlika susednih elemenata je $max_razlika")
  73.  
  74.  
  75. #Zadatak 6.2. Sortirati rastuće niz struktura koje predstavljaju
  76. #studente prema broju indeksa, upotrebom Selection sort algoritma.
  77. #Struktura koja predstavlja studenta sadrži polja ime, prezime i
  78. #brojIndeksa.
  79.  
  80. struct Student
  81.     ime::String
  82.     prezime::String
  83.     brojIndeksa::Int
  84. end
  85.  
  86. function ispisStudenata(studenti)
  87.    for i in 1:length(studenti)
  88.       println("$i. $(studenti[i].ime), $(studenti[i].prezime), $(studenti[i].brojIndeksa)");
  89.    end
  90. end
  91.  
  92. studenti = []
  93. push!(studenti, Student("Marko", "Markovic", 13))
  94. push!(studenti, Student("Nikola", "Tomic", 8))
  95. push!(studenti, Student("Srdjan", "Knezevic", 5))
  96. push!(studenti, Student("Branislav", "Tomic", 17))
  97. push!(studenti, Student("Nenad", "Nikolic", 16))
  98. push!(studenti, Student("Ivana", "Ivanovic", 2))
  99. push!(studenti, Student("Branislav", "Tomic", 9))
  100. push!(studenti, Student("Stefan", "Zivkovic", 3))
  101.  
  102. function selectionSort!(A, za_uporedi)
  103.     n = length(A)
  104.     for i=1:n-1
  105.     minIdx = i
  106.         for j=i+1:n
  107.             if (za_uporedi(A[j], A[minIdx]))
  108.             minIdx = j
  109.             end
  110.         end
  111.         if i!=minIdx
  112.         A[[i minIdx]] = A[[minIdx i]];
  113.         end
  114.     end
  115. end
  116.  
  117. function uporedi(stud1,stud2)
  118.     return stud1.brojIndeksa<stud2.brojIndeksa
  119. end
  120.  
  121. println("Nesortirani studenti")
  122. ispisStudenata(studenti)
  123.  
  124. selectionSort!(studenti, uporedi)
  125. println("Sortirani studenti")
  126. ispisStudenata(studenti)
  127.  
  128.  
  129. # Qucik sort ~ Merge sort, podeli i osvoji paradigma, najtezi
  130. #PSEUDOKOD, tesko
  131. #redovan kod
  132.  
  133. function quickSort!(A)
  134.     quickSortStep!(A, 1, length(A));
  135.     end
  136.  
  137. function quickSortStep!(A, p, r)
  138.     if p < r
  139.     q = partition!(A, p, r);
  140.     quickSortStep!(A, p, q-1);
  141.     quickSortStep!(A, q+1, r);
  142.     end
  143. end
  144.  
  145. function partition!(A, p, r)
  146.     x = A[r];
  147.     i = p - 1;
  148.     for j = p:r-1
  149.     if A[j] <= x
  150.     i = i + 1;
  151.     A[[i j]] = A[[j i]];
  152.     end
  153.     end
  154.     A[[i+1 r]] = A[[r i+1]];
  155.     return i + 1;
  156. end
  157.  
  158.  
  159. #Zadatak 6.3. Implementirati Quick sort u Julia-i tako da sortira
  160. #elemente niza brojeva u opadajućem redosledu. Prebrojati koliko
  161. #različitih brojeva postoji.
  162.  
  163. function quickSort!(A)
  164.     quickSortStep!(A, 1, length(A));
  165. end
  166.  
  167. function quickSortStep!(A, p, r)
  168.     if p < r
  169.     q = partition!(A, p, r);
  170.     quickSortStep!(A, p, q-1);
  171.     quickSortStep!(A, q+1, r);
  172.     end
  173. end
  174.  
  175. function partition!(A, p, r)
  176.     x = A[r];
  177.     i = p - 1;
  178.     for j = p:r-1
  179.         if A[j] >= x    #opadajuci redosled
  180.         i = i + 1;
  181.         A[[i j]] = A[[j i]];
  182.         end
  183.     end
  184.     A[[i+1 r]] = A[[r i+1]];
  185.     return i + 1;
  186. end
  187.  
  188. B = [2 19 5 19 7 1 14 9 1 1 22 1 8]
  189. quickSort!(B)
  190. println("Sortirani niz izgleda ovako $B")
  191. br=1
  192. for i in 1:length(B)-1
  193.     if  B[i] != B[i+1]
  194.         br=br+1
  195.     end
  196. end
  197. println("Broj razlicitih je $br")   #imamo 9 razlicitih
  198.  
  199.  
  200. #Zadatak 6.4. Sortirati niz struktura koje predstavljaju studente
  201. #prema prezimenu, upotrebom Quick sort algoritma. Ukoliko dva
  202. #studenta imaju isto prezime, sortirati ih po imenu. Studente sa
  203. #istim imenom i prezimenom sortirati po broju indeksa. Struktura
  204. #koja predstavlja studenta sadrži polja ime, prezime i brojIndeksa.
  205.  
  206. function quickSort!(A, za_uporedi)
  207.     quickSortStep!(A, 1, length(A), za_uporedi);
  208.     end
  209.  
  210. function quickSortStep!(A, p, r, za_uporedi)
  211.     if p < r
  212.     q = partition!(A, p, r, za_uporedi);
  213.     quickSortStep!(A, p, q-1, za_uporedi);
  214.     quickSortStep!(A, q+1, r, za_uporedi);
  215.     end
  216. end
  217.  
  218. function partition!(A, p, r, za_uporedi)
  219.     x = A[r];
  220.     i = p - 1;
  221.     for j = p:r-1
  222.     if za_uporedi(A[j], x)
  223.     i = i + 1;
  224.     A[[i j]] = A[[j i]];
  225.     end
  226.     end
  227.     A[[i+1 r]] = A[[r i+1]];
  228.     return i + 1;
  229. end
  230.  
  231. function uporedi(s1, s2)
  232.     return s1.prezime < s2.prezime || s1.prezime == s2.prezime && s1.ime < s2.ime ||
  233.     s1.prezime == s2.prezime && s1.ime == s2.ime && s1.brojIndeksa < s2.brojIndeksa;
  234. end
  235.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement