python 快速排序 递归_快速排序基本思想,递归写法,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

while arr[right]>=base and left

right -=1

arr[left]=arr[right]

while arr[left]

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 array, int start, int end) {

if (start>end){

return;

}

int left = start,right = end;

double base = array.get(left);

while (left

while (array.get(right)>=base && left

right --;

}

array.set(left,array.get(right));

while (array.get(left)

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

while (low= base){

height -= 1

}

arr(low) = arr(height)

while (low

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)

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值