每周一算-快速排序
Posted Chicken Run Run
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了每周一算-快速排序相关的知识,希望对你有一定的参考价值。
1.算法思想
取最左边的数为基准,使得左边的数都小于基准数,右边的数都大于基准数;然后依次类推;
要实现上述的过程,就需要进行比较后交换,并且最终把基准数放到正确的位置上,过程如下:
2.过程
例如6,1,2,7,9,3,4,5,10,8
以最左侧6为基准数, 从右侧向左侧找到小于6的数字;
从右向左找到大于6的数字;
第一趟:
右侧找到5<6停下来;
左侧找到>6的数停下来;
然后交换5和7的位置left right指针不动; 如下
然后再继续从右侧right找小于6的数字, 从左侧找大于6的数字;
交换后结果如下:
3.代码如下
package sort;
/**
* Created by IntelliJ IDEA.
* 快速排序;
*/
public class QuickSort {
public static void main(String[] args) {
int[] ax={1,2,5,9,5,4,3,0,0};
quickSort(ax,0,ax.length-1);
for (int i = 0; i < ax.length; i++) {
System.out.print(ax[i]+ " ");
}
}
public static void quickSort(int arr[],int left ,int right){
if(left>right){
return;
}
//找到最左侧的基准数;
int base = arr[left];
int i = left;
int j = right;
//以基准数为基础,从右侧找到小于基准数的数字;
//以基准数为基础,从左侧开始找到大于基准数的数字;
while (i!=j){
while (arr[j]>=base && i<j){
j--;
}
while (arr[i]<=base && i<j){
i++;
}
//找到后交换两个数;
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
//交换基准数,left==right;
arr[left] = arr[i];
arr[i] = base;
//继续剩下的左边的集合;
quickSort(arr,left,i-1);
//继续剩下的右边的集合;
quickSort(arr,j+1,right);
}
}
4. 查询效率
平均情况下快速排序的时间复杂度是O(nlgn),最坏情况是O(n2)。
5. 总结
欠的总是要还的
以上是关于每周一算-快速排序的主要内容,如果未能解决你的问题,请参考以下文章