博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java实现快速排序
阅读量:6691 次
发布时间:2019-06-25

本文共 1740 字,大约阅读时间需要 5 分钟。

期望时间复杂度o(nlogn)  最坏情况时间复杂度o(n^2);

无序数组{A1.........An} 先取一个基数K=A1,设置从后往前遍历的索引j(初始值为arrays.length-1),从前往后遍历的索引i(初始值为0)。从后往前遍历时(j--),找到第一个小于K的数,交换两个数的位置,记录index,然后从前往后遍历,找到第一个大于K的数,于索引index的数(K)交换位置,刷新index。然后从上次后往前停留的索引出开始往前找小于K的数........   总的来说就是  重复从后往前找更小的交换位置  从前往后找更大的交换位置  直到i=j跳出循环

以上是一趟排序过程  结果就是K左边的数都比K小,K右边的数都比K大。

然后就对K左边的数组{a1......ak-1}  K右边的数组{ak+1........an}进行递归(重复以上步骤)

java代码如下

/**     * 快速排序     * @param beginIndex 对arrays中需要排序的数组 开始的索引     * @param endIndex 对arrays中需要排序的数组 结束的索引     * @param arrays 需要排序的整个数组     */    public static void sort(int beginIndex,int endIndex,int[] arrays){       if(arrays == null || arrays.length <= 1){           return;       }               int i = beginIndex,j=endIndex;           //以array[0]为基准       int k = arrays[i];       int k_index = beginIndex;//记录K的index       //j往前遍历比k小的数并且交换 i设置为该数的index       //i往后遍历比k大的数并且交换 i设置为该数的index       //一直到i=j       while(i != j){           for(;j>=0;j--){               if(j==i) break;               if(arrays[j] < k){                   //交换位置                   int temple = arrays[j];                   arrays[j] = k;                   arrays[k_index] = temple;                   //记录index                   k_index = j;                   break;               }           }           for(;i
k){ //交换位置 int temple = arrays[i]; arrays[i] = k; arrays[k_index] = temple; //记录index k_index = i; break; } } } if(i>=2 && i <= arrays.length-2){ sort(0,i-1,arrays); sort(i+1,arrays.length-1,arrays); } }

 

转载于:https://www.cnblogs.com/hithlb/p/3599180.html

你可能感兴趣的文章
mysql实战31 | 误删数据后除了跑路,还能怎么办?
查看>>
ASP.NET MVC Razor
查看>>
python:使用OO和工厂模式解决问题
查看>>
C++学习-2
查看>>
GAITC 2019全球人工智能技术大会(南京)
查看>>
使用gradle生成protobuf
查看>>
transition transform animate的使用
查看>>
【翻译】Ext JS最新技巧——2014-5-12
查看>>
全局临时表
查看>>
谈谈加载(Loading)的那点事
查看>>
微信公众平台开发(108) 微信摇一摇
查看>>
linux环境中如何删除文件的前n行?
查看>>
.Net转Java自学之路—SpringMVC框架篇七(Json数据交互)
查看>>
jQuery通过name获取值
查看>>
phpcms网站搬家 至 服务器 完整并且详细过程
查看>>
myBatis针对不同数据库的模糊查询
查看>>
列表转字典
查看>>
编译基于obs-studio的阿里巴巴直播工具tblive的过程和常见问题解决
查看>>
002-利润计算
查看>>
Tensorflow实现CNN
查看>>