用C++实现查找第K大数
时间: 2023-05-19 20:05:03 浏览: 110
通过C++实现查找完全数
5星 · 资源好评率100%
可以使用快速选择算法来实现查找第K大数。该算法的基本思想是利用快速排序的思想,每次选取一个枢轴元素,将数组分为两部分,一部分比枢轴元素小,一部分比枢轴元素大,然后判断第K大数在哪一部分中,继续对该部分进行递归查找,直到找到第K大数为止。以下是该算法的C语言实现代码:
```c
#include <stdio.h>
int partition(int arr[], int left, int right)
{
int pivot = arr[right];
int i = left - 1;
for (int j = left; j < right; j++) {
if (arr[j] >= pivot) {
i++;
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
int temp = arr[i + 1];
arr[i + 1] = arr[right];
arr[right] = temp;
return i + 1;
}
int quickSelect(int arr[], int left, int right, int k)
{
if (left == right) {
return arr[left];
}
int pivotIndex = partition(arr, left, right);
if (k == pivotIndex) {
return arr[k];
} else if (k < pivotIndex) {
return quickSelect(arr, left, pivotIndex - 1, k);
} else {
return quickSelect(arr, pivotIndex + 1, right, k);
}
}
int main()
{
int arr[] = {3, 2, 1, 5, 6, 4};
int k = 2;
int n = sizeof(arr) / sizeof(arr[0]);
int kthLargest = quickSelect(arr, 0, n - 1, k - 1);
printf("The %dth largest element is %d\n", k, kthLargest);
return 0;
}
```
该程序的输出结果为:
```
The 2th largest element is 5
```
阅读全文