快速排序

快速排序:

给定一数组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

 

 

posted on 2012-08-27 16:47  maolj  阅读(120)  评论(0编辑  收藏  举报

导航