您的位置:首页 > 其它

快速排序

2017-04-13 10:53 169 查看
/**
* 快速排序
* @author TMACJ
* 思路:一般选取第一个数作为基数,然后从后往前比较,如果比基数小,就和基数交换,在从左往右比较,如果比基数大,就交换,直到i=j为止,此时,把这个数组按基数为分界,分成两组,在进行上述计算
* 空间复杂度 O(1)
* 时间复杂度O(n^2)
* Q:快排为什么这么快?
* A:因为你通过观察就可以知道,当一轮排序过后,比K值大的数和比K值小的数永远无法再比较,这就减少了比较的次数,所以快
* Q:什么时候用快排?
* A:在相对无序的情况下,快排的效率高,而有序的情况下,基本会退化为冒泡排序,所以效率低,有序用插入排序的效率是最高的
*/
public class QuickSort {
/**
*
* @param a 传入的数组
* @param low0 原低位指针
* @param high0 原高位指针
*/
public static void sort(int[] a,int low0,int high0){
int low = low0;//不破坏原始指针
int high = high0;
if(low>=high){
return;
}
boolean direction = false;//控制方向的boolean变量,flase向前,true向后
while(low!=high){
if(a[low]>a[high]){
int temp = a[low];
a[low] = a[high];
a[high] = temp;
direction = (direction == true)?false:true;
}
if(direction == false){
high--;
}
else{
low++;
}
}
//分割成两个数组
low--;
high++;
sort(a, low0, low);
sort(a, high, high0);
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: