クイックソート

ライブラリに頼らないで実装してみた。

#!/usr/bin/env ruby

def qsort(data, min, max)
  if min >= max
    return
  end
  pivot = data[(max + min) / 2]
  i = min  
  j = max
  while 1
    while data[i] < pivot
      i += 1
    end
    while data[j] > pivot 
      j -= 1
    end
    if i >= j
      break
    end
    data[j] = data[i] ^ data[j]
    data[i] = data[j] ^ data[i]
    data[j] = data[i] ^ data[j]
    i += 1
    j -= 1
  end
  qsort(data, min, i - 1)
  qsort(data, j + 1, max)
end

p data = [3322, 22, 34, 383222, 38, 28, 33]
qsort(data, 0, data.size - 1)
p data