快速排序基本思想,递归写法,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) } }
自动化学习。