Advertisement
Guest User

Untitled

a guest
Nov 23rd, 2014
145
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scala 1.50 KB | None | 0 0
  1. // 1 a)
  2. def swap(tab: Array[Int], i: Int, j: Int): Unit ={
  3.     val aux = tab(i)  //przyjmuje tablice i nr indeksow ktore zamieni
  4.     tab(i) = tab(j)
  5.     tab(j) = aux
  6. }
  7.  
  8. // 1 b)
  9. def choose_pivot(tab: Array[Int], m: Int, n: Int): Int =
  10. tab((m + n) / 2) //m - (index) poczatek tab n - (index)koniec
  11. //zwraca element srodkowy - pivot
  12.  
  13. def partition(tab: Array[Int], l: Int, r: Int): (Int, Int) ={
  14. var i = l
  15. var j = r
  16. val pivot = choose_pivot(tab, l, r)
  17.     while (i <= j) { //ustawia elem
  18.         while (tab(i) < pivot) i += 1 //mniejsze przed pivotem
  19.         while (pivot < tab(j)) j -= 1 //wieksze po pivocie
  20.         if (i <= j) {
  21.         swap(tab, i, j)
  22.         i += 1
  23.         j -= 1
  24.     }
  25. }
  26.     (i, j) //para ktora dzieli tablice
  27.     //na elem wieksze i mniejsze od pivota
  28. }
  29.  
  30. //1 c)
  31. def quick(tab: Array[Int], l: Int, r: Int): Unit =
  32.  
  33. if (l < r) { //sprawdza czy index poczatku
  34.             //na pewno jest mniejszy od indexu konca
  35.     val (i, j) = partition(tab, l, r) //bierze pare dzielaca
  36.     if ((j - l) < (r - i)) { //sprawdza ktora podtablica jest krotsza
  37.     quick(tab, l, j) //sortuje rekurencyjnie
  38.     quick(tab, i, r)//najpierw krotsza, potem dluzsza
  39.     }               //dzieki temu zlozonosc lg n
  40. else {
  41.     quick(tab, i, r)
  42.     quick(tab, l, j)
  43.     }
  44. }
  45.  
  46. //1 d)
  47. def quicksort(tab: Array[Int]) =
  48. quick(tab, 0, tab.length - 1) //wywoluje sortwanie dla calej tablicy
  49.  
  50. //2
  51. def whileLoop(war: => Boolean, akcja: => Unit): Unit =
  52. if (war) {
  53. akcja
  54. whileLoop(war, akcja)
  55. }
  56. var z = 0 //nie moze byc val, bo jest niemodyfikowalna
  57. whileLoop( z<10, { printf(z.toString) ;z=z+1 } )
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement