快速排序基本思想,递归写法,python和java编写快速排序

1、基本思想

        快速排序有很多种编写方法,递归和分递归,分而治之法属于非递归,比递归简单多了。在这不使用代码演示。下面我们来探讨一下快速排序的递归写法思想吧。

        设要排序的数组是A[0]……A[N-1],首先任意选取一个数据(通常选用数组的第一个数)作为关键数据,然后将所有比它小的数都放到它左边,所有比它大的数都放到它右边,这个过程称为一趟快速排序。值得注意的是,快速排序不是一种稳定的排序算法,也就是说,多个相同的值的相对位置也许会在算法结束时产生变动。

2、python实现

# coding:utf-8
import numpy
def quickSort(arr,start,end):

    if start>end:
        return arr
    left,right = start,end
    base = arr[left]
    while left<right:
        while arr[right]>=base and left<right:
            right -=1

        arr[left]=arr[right]

        while arr[left]<base and left<right:
            left+=1

        arr[right]=arr[left]
    arr[left] = base
    quickSort(arr,start,left-1)
    quickSort(arr,left+1,end)

if __name__=="__main__":

    arrs = numpy.random.randint(0,20,(10))
    print(arrs)
    quickSort(arrs,0,len(arrs)-1)
    print(arrs)

  

3、java实现

private static void quickSort(List<Double> array, int start, int end) {
        if (start>end){
            return;
        }
        int left = start,right = end;
        double base = array.get(left);

        while (left<right){
            while (array.get(right)>=base && left<right){
                right --;
            }
            array.set(left,array.get(right));
            while (array.get(left)<base && left<right){
                left ++;
            }
           array.set(right,array.get(left));
        }

        array.set(left,base);
        quickSort(array,start,left-1);
        quickSort(array,left+1,end);
    }

  

java使用ArrayList来计算快排,也可以使用数组。代码流程差不多。

4、scala 实现

package com.dataFrameCz

import scala.collection.mutable.ListBuffer

object quickALG {

  def quickSort(arr:ListBuffer[Double],start:Int,end:Int): ListBuffer[Double] = {

    if (start >= end) {
      return arr
    }
    var low: Int = start
    var height:Int = end

    var base:Double = arr(low)

    while (low<height){
      while (low<height & arr(height) >= base){
        height -= 1
      }
      arr(low) = arr(height)
      while (low<height & arr(low)< base){
        low += 1
      }
      arr(height) = arr(low)
    }
    arr(low) = base
    quickSort(arr,start,low-1)
    quickSort(arr,low+1,end)
  }

  def main(args: Array[String]): Unit = {
    var ar:ListBuffer[Double] = ListBuffer(1.0,2.0,3.0,4.2,1.0,2.3,3.1)
    quickSort(ar,0,ar.size-1)
    println(ar)
  }
}

  

 

posted @ 2019-05-10 11:55  洺剑残虹  阅读(566)  评论(0编辑  收藏  举报