----------- 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+" ");
}
}
}
以上是学习排序的一点心得,还望指正!