快速排序
快速排序:
给定一数组A[num1,num2],取A[num1]为比较元,i=num1,j=num2
1:i,j分别从A数组两端开始遍历,若 i > j,则跳出循环,否则取到第一个A[i] >= A[num1],A[j] < A[num1]
交换A[i]跟A[j],继续遍历直至完成
2:交换A[num1]跟A[j]元素,这样A[j]左边的元素都小于A[j],而右边的都大于它
3:递归处理A[num1-j],A[j+1,num2]
4:递归出口 num1 >= num2
ruby 代码:
class Array
def quicksort
realsort(0,self.size-1)
end
def realsort(num1,num2)
left = self[num1]
i = num1
j = num2 + 1
if num1 < num2
while true
while i < num2
i += 1
break if self[i] >= left
end
while j > num1
j -= 1
break if self[j] < left
end
break if i >= j
self[i],self[j] = self[j],self[i]
end
self[num1],self[j] = self[j],self[num1]
realsort[num1,j]
realsort[j+1,num2]
end
end
end
a = [2,23,45,24,3445,2,43,54,3]
a.quicksort
p a