数据结构与算法Java实现(2)——快速排序

版权声明: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));
    }
}

推荐下这个帖子写的很好…点击此处

猜你喜欢

转载自blog.csdn.net/weixin_43701058/article/details/89916649