黑马程序员--浅谈快速排序
2015-12-18 14:41
281 查看
----------- android培训、java培训、java学习型技术博客、期待与您交流! ---------
快速排序其实是冒泡排序的改进,它十分经典,对于锻炼我们的算法思想也很有帮助。
它的思路是:通过一趟排序将要排序的数据分为两个部分,其中一部分的所有数据都比另外一部分的所有数据都要小,这样只需要分别对两个子数组排序即可。最坏情况的时间复杂度为O(n2),最好情况时间复杂度为O(nlog2n)。
①声明两个变量I、J,开始时I=1,J=N;
②以第一个数组元素赋值给X,即X=A[1];
③从J开始向前搜索,即由后开始向前搜索(J=J-1),找到第一个小于X的值,交换;
④从I开始向后搜索,即由前开始向后搜索(I=I+1),找到第一个大于X的值,交换;
⑤重复第3、4步,直到I=J;
以下为代码实现:
package itheima;
public class QuickSort {
public static void quiteSort( int[] o , int low , int hight ){
if(low < hight){
int povitePosition = test(o,low,hight);
quiteSort( o , low , povitePosition - 1);
quiteSort( o , povitePosition + 1 , hight );
}
}
private static int test( int[] a , int s , int l ){//
int p = a[s];
while(s < l){
while(l > s && sort( p , a[l] ) <= 0 ){// 高位找到比p大,符合要求,继续寻找
l -- ;
}
a[s] = a[l] ;
while(s < l && sort( p , a[s] ) >= 0){ //低位开始找到比p小,符合要求,继续寻找
s ++ ;
}
a[l] = a[s];
}
a[s] = p ;
return s;
}
private static int sort(int num1, int num2) {
return num1 - num2 ;
}
public static void main(String[] args) {
int[] i = {26,53,48,15,13,46,32,15};
quiteSort(i, 0, i.length-1);
for(int j:i){//这个是强类型的for循环
System.out.print(j+" ");
}
}
}
以上是学习排序的一点心得,还望指正!
快速排序其实是冒泡排序的改进,它十分经典,对于锻炼我们的算法思想也很有帮助。
它的思路是:通过一趟排序将要排序的数据分为两个部分,其中一部分的所有数据都比另外一部分的所有数据都要小,这样只需要分别对两个子数组排序即可。最坏情况的时间复杂度为O(n2),最好情况时间复杂度为O(nlog2n)。
①声明两个变量I、J,开始时I=1,J=N;
②以第一个数组元素赋值给X,即X=A[1];
③从J开始向前搜索,即由后开始向前搜索(J=J-1),找到第一个小于X的值,交换;
④从I开始向后搜索,即由前开始向后搜索(I=I+1),找到第一个大于X的值,交换;
⑤重复第3、4步,直到I=J;
以下为代码实现:
package itheima;
public class QuickSort {
public static void quiteSort( int[] o , int low , int hight ){
if(low < hight){
int povitePosition = test(o,low,hight);
quiteSort( o , low , povitePosition - 1);
quiteSort( o , povitePosition + 1 , hight );
}
}
private static int test( int[] a , int s , int l ){//
int p = a[s];
while(s < l){
while(l > s && sort( p , a[l] ) <= 0 ){// 高位找到比p大,符合要求,继续寻找
l -- ;
}
a[s] = a[l] ;
while(s < l && sort( p , a[s] ) >= 0){ //低位开始找到比p小,符合要求,继续寻找
s ++ ;
}
a[l] = a[s];
}
a[s] = p ;
return s;
}
private static int sort(int num1, int num2) {
return num1 - num2 ;
}
public static void main(String[] args) {
int[] i = {26,53,48,15,13,46,32,15};
quiteSort(i, 0, i.length-1);
for(int j:i){//这个是强类型的for循环
System.out.print(j+" ");
}
}
}
以上是学习排序的一点心得,还望指正!
相关文章推荐
- Java狡猾面试题 Top10
- 黑马程序员--谈谈哲学家就餐的问题
- 初当技术面试官感悟:给面试者的忠告
- 大龄程序员怎样渡过中年危机
- 黑马程序员--java线程总结(三)
- 【开源】简单4步搞定QQ登录,无需什么代码功底【无语言界限】下 ~ Net程序员的福利
- 最近5年133个Java面试问题列表
- 黑马程序员--java线程总结(二)
- 黑马程序员--java线程总结(一)
- 黑马程序员——Java---异常
- 面试被虐,以下近期要提高
- 社会经验-职场经验(以后自己做老板需要警觉)
- sql 经典面试题
- 论程序员的取财之道
- Java并发多线程面试题 Top 50
- 程序员困境(转载至: Medium(by Try Chen))
- 【跟着大磨马学IT编程(安卓java程序员)】第十八天 课程内容概述
- 黑马程序员--基本数据类型总结
- 创意十足的面试,让你成功逆袭,打动HR!
- 创意十足的面试,让你成功逆袭,打动HR!