快排思想找第K大的数

public int findKth(int[] a, int n, int K) {
    
    
    return quickFind(K, a, 0, n - 1);
}

public int quick(int nums[], int left, int right) {
    
    
    int temp = nums[left]; // 枢纽值
    while (left < right) {
    
    
        while (temp >= nums[right] && left < right) {
    
    
            right--;
        }
        nums[left] = nums[right];
        while (temp <= nums[left] && left < right) {
    
    
            left++;
        }
        nums[right] = nums[left];
    }
    nums[right] = temp;
    return right;
}

public int quickFind(int K, int nums[], int left, int right) {
    
    
    int temp = quick(nums, left, right);
    if (temp == K - 1) {
    
    
        return nums[temp];
    } else if (temp > K - 1) {
    
    
        return quickFind(K, nums, left, temp - 1);
    } else {
    
    
        return quickFind(K, nums, temp + 1, right);
    }
}

猜你喜欢

转载自blog.csdn.net/for62/article/details/108512564
今日推荐