Java版快速排序[不稳定]

发布于 2020-04-15 15:46:46
关注者
1
被浏览
1082
1 个回答
  • 面试哥
    面试哥 2020-04-15
    为面试而生,有面试问题,就找面试哥。

    原理:分治+递归

    复杂度:O(nlgn) - O(nlgn) - O(n^2) - O(1)[平均 - 最好 - 最坏 - 空间复杂度]

    栈空间0(lgn) - O(n)

    // 固定基准
    public void quickSort(int[] a, int low, int high) {
    		if (null == a || a.length < 2) {
    			return;
    		}
    		if (low < high) {
    			int mid = partition(a, low, high);
    			quickSort(a, low, mid-1);
    			quickSort(a, mid+1, high);
    		}
    	}
    
    	private int partition(int[] a, int low, int high) {
    		int pivot = a[low];
    
    		while (low < high) {
    			// 注意等于,否则死循环
    			while (low < high && a[high] >= pivot) {
    				high--;
    			}
    			a[low] = a[high];
    			// 注意等于,否则死循环
    			while (low < high && a[low] <= pivot) {
    				low++;
    			}
    			a[high] = a[low];
    		}
    		a[low] = pivot;
    		
    		return low;
    	}
    
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看