版权声明:Songcz原创,如有转载请注明出处 https://blog.csdn.net/weixin_43701058/article/details/89916649
快速排序是一种不稳定的,交换排序。
在这里补充下稳定和不稳定的概念。
稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面;
不稳定:如果a原本在b的前面,而a=b,排序之后a可能会出现在b的后面;
思路:百度百科说的就还行
通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
时间复杂度,平均,最好情况O(nlogn),最坏情况O(n2)
最坏情况整个数组都是逆向,快速排序将退化成冒泡排序。
直接上代码
import java.util.Arrays;
/**
* 快速排序(递归实现)
* @author Scz
*/
public class QuickSort {
public static void quickSort(int[] a,int low,int high){
int i,j,temp,t;
if(low>high){
return;
}
i=low;
j=high;
temp = a[low];//temp就是基准位
while (i<j) {
while (temp<=a[j]&&i<j) {//从右往左依次递减
j--;
}
while (temp>=a[i]&&i<j) {//从左往右依次递增
i++;
}
if (i<j) {//如果满足条件则交换
//这个位置就可以看出来快速排序和冒泡排序都是交换排序
t = a[j];
a[j] = a[i];
a[i] = t;
}
} //(跳出上面大的while循环之后,i和j肯定是相等的)
a[low] = a[i]; //最后将基准位与i和j相等位置的数字交换
a[i] = temp;
quickSort(a, low, i-1); //左半数组递归调用
quickSort(a, j+1, high); //右半数组递归调用
}
public static void main(String[] args){
int[] a = {5,4,7,6,2,8};
quickSort(a, 0, a.length-1);
System.out.println(Arrays.toString(a));
}
}
推荐下这个帖子写的很好…点击此处