Advertisement
Guest User

quick.nim

a guest
Dec 23rd, 2018
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Nim 0.97 KB | None | 0 0
  1. import sequtils, system, random
  2. discard """クイックソート
  3. 先頭をピボットに任命->ピボットより小さいのを左に、大きいのを右に->左右それぞれにもう一度
  4. ソート対象の動的配列は?->seqで
  5. """
  6. proc qsort(arr:var seq[int],l:int,r:int):void
  7.  
  8. var testdata:seq[int]
  9. testdata= @[0,1,2,3,4,5,6,7,8,9,10]
  10. randomize()
  11. for i in 0..10:
  12.   swap(testdata[i],testdata[i + rand(max= 10 - i )])
  13.   echo testdata[i]
  14.  
  15. qsort(testdata,0,10)
  16. echo testdata
  17.  
  18. proc qsort(arr:var seq[int],l:int,r:int):void=
  19.   let p=arr[l]
  20.   var
  21.     i=l
  22.     j=r
  23. #  echo "p=",p,",l=",l,",r=",r
  24.   if r-l<1:return
  25.   while i<=j:
  26.     while arr[i]<p:
  27.       i+=1
  28.     while arr[j]>p:
  29.       j-=1
  30.     if i==j:break
  31.     if i<j:
  32. #      echo "swaped ",arr[i],"<=>",arr[j]
  33.       swap(arr[i],arr[j])
  34.       #var tmp=arr[i]
  35.       #arr[i]=arr[j]
  36.       #arr[j]=tmp
  37.       i+=1
  38.       j-=1
  39.   echo arr
  40. #  echo "i=",i,",j=",j
  41.   qsort(arr,l,i-1)
  42.   qsort(arr,j+1,r)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement