对于给定的n个元素数组,找出第k小元素。c语言
时间: 2023-05-22 19:06:58 浏览: 98
可以使用快速选择算法来找出第k小元素。这个算法需要O(n)的时间复杂度,其中n为数组的元素个数。这是一个比较高效的算法,具体实现可以看一下下面的代码:
int partition(int arr[], int low, int high) {
int pivot = arr[high];
int i = low - 1;
for (int j = low; j <= high - 1; 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[high];
arr[high] = temp;
return i + 1;
}
int kthSmallest(int arr[], int low, int high, int k) {
if (k > 0 && k <= high - low + 1) {
int pos = partition(arr, low, high);
if (pos - low == k - 1)
return arr[pos];
if (pos - low > k - 1)
return kthSmallest(arr, low, pos - 1, k);
return kthSmallest(arr, pos + 1, high, k - pos + low - 1);
}
return -1;
}
这段代码首先定义了一个partition函数用来将元素划分为小于等于pivot的部分和大于pivot的部分。然后,定义了一个kthSmallest函数来找到第k小的元素。这个函数先以O(n)的时间复杂度将元素划分,并且根据划分后的位置选择递归的方向。当找到第k小的元素时返回它的值,否则返回-1。
阅读全文