您的位置:首页 > 职场人生

黑马程序员--浅谈快速排序

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+" ");
}
}
}

以上是学习排序的一点心得,还望指正!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: