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)
}
}