看了《算法图解》一书,对书中的快速排序,很是印象深刻,便记下来。
本文,提供java语言和python语言的快速排序实现代码。
时间复杂度:O (nlogn)
算法图:
(引用了《算法图解》中的图)
java:
/**
* @Author:xch
* @Date:Create in 17:14 2018/2/26
* @Description:快速排序
*/
public class QuickSort {
public static void main(String[] args) {
List num=new ArrayList<>();
num.add(3);
num.add(9);
num.add(7);
num.add(1);
num.add(5);
num.add(2);
num.add(7);
System.out.println(quickSort(num));
}
/**
* @Param:[num]
* @Return:java.util.List
* @Date:Create in 17:20 2018/26
* @Description:快速排序工具类
*/
public final static List quickSort(List<Integer> num){
if(num==null){
return null;
}
if(num.size()<2){//递归的终止条件(基线条件)
return num;
}else{
List result=new ArrayList<>();
Integer fiducial_value=num.get(num.size()/2);//以数组中间值,作为“基准值”
num.remove(num.size()/2);//从集合中删除“基准值”
List<Integer> less_list=new ArrayList<>();//小于基准值的集合
List<Integer> large_list=new ArrayList<>();//大于基准值的集合
for (Integer integer : num) {
if(integer<=fiducial_value){
less_list.add(integer);
}
if(integer>fiducial_value){
large_list.add(integer);
}
}
result.addAll(quickSort(less_list));//对“小于基准值的集合”进行快速排序,添加到result
result.add(fiducial_value); //"基准值"添加到result
result.addAll(quickSort(large_list));//对“大于基准值的集合”进行快速排序,添加到result
return result;
}
}
}
python:
##快速排序
def quickSort(array):
if len(array)<2:
return array;
else:
j=int(len(array)/2)
fiducial_value=array[j] ##基准值
del array[j]; ##从数组中删除“基准值”
less=[i for i in array if i<=fiducial_value]##遍历,把小于基准值的存储进less
greater=[i for i in array if i>fiducial_value]##遍历,把大于基准值的存储进greater
# 对“小于基准值的数组”进行快速排序,添加到result
# "基准值"添加到result
# 对“大于基准值的集合”进行快速排序,添加到result
result = quickSort(less) + [fiducial_value] + quickSort(greater);
return result;
array=[1,2,5,2,8,7,9,299,12,122,12,12.2,11]
print(quickSort(array))
代码有注释,不再解释。
但要说出,对于算法,python具有得天独厚的优势,单单从代码数量上,就能直接体现出来。
---------------------------------------------------------------------------不关注我“象话”吗?
如有疑惑,请评论留言。
如有错误,也请评论留言。