def rotate(a,b,c) (b[0]-a[0])*(c[1]-b[1])-(b[1]-a[1])*(c[0]-b[0]) end def qsort(start,a,p) # 2. Упорядкування даних точок if (p.length<2) # якщо масив порожній або одноелементний, return p # тобто немає що упорядковувати, … end k = rand(p.length) # випадковим чином вибрати значення елемента # масиву, щоб уникнути переповнення стеку # при упорядкованих даних dk=(a[start][0]-a[p[k]][0]).abs+(a[start][1]-a[p[k]][1]).abs left = [] center = [] right = [] for j in 0...p.length dj=(a[start][0]-a[p[j]][0]).abs+(a[start][1]-a[p[j]][1]).abs x = rotate(a[start],a[p[k]],a[p[j]]) if x<0 left.push(p[j]) else if x>0 right.push(p[j]) else if dj>dk left.push(p[j]) else if dj