C语言 利用递归归并排序查找无序数组中第K大元素
时间: 2023-05-11 20:05:00 浏览: 96
可以使用递归归并排序来查找无序数组中第K大的元素。具体实现方法是先将无序数组进行归并排序,然后返回排序后的第K个元素即可。以下是示例代码:
```c
#include <stdio.h>
int merge(int arr[], int l, int m, int r) {
int i, j, k;
int n1 = m - l + 1;
相关问题
C语言,利用递归归并排序查找无序数组中第K大元素
以下是C语言利用递归归并排序查找无序数组中第K大元素的代码:
```
#include <stdio.h>
int merge(int arr[], int l, int m, int r) {
int i, j, k;
int n1 = m - l + 1;
int n2 = r - m;
int L[n1], R[n2];
for (i = 0; i < n1; i++)
L[i] = arr[l + i];
for (j = 0; j < n2; j++)
R[j] = arr[m + 1 + j];
i = 0;
j = 0;
k = l;
while (i < n1 && j < n2) {
if (L[i] >= R[j]) {
arr[k] = L[i];
i++;
}
else {
arr[k] = R[j];
j++;
}
k++;
}
while (i < n1) {
arr[k] = L[i];
i++;
k++;
}
while (j < n2) {
arr[k] = R[j];
j++;
k++;
}
}
int mergeSort(int arr[], int l, int r, int k) {
if (l < r) {
int m = l + (r - l) / 2;
mergeSort(arr, l, m, k);
mergeSort(arr, m + 1, r, k);
merge(arr, l, m, r);
}
if (r - l + 1 == k) {
printf("%d", arr[r]);
return arr[r];
}
}
int main() {
int arr[] = { 12, 3, 5, 7, 19 };
int n = sizeof(arr) / sizeof(arr[0]);
int k = 3;
mergeSort(arr, 0, n - 1, k);
return 0;
}
```
关于中文加密的问题,我可以提供以下代码作为参考:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void encrypt(char* str, int key) {
int len = strlen(str);
for (int i = 0; i < len; i++) {
if (str[i] >= 'a' && str[i] <= 'z') {
str[i] = (str[i] - 'a' + key) % 26 + 'a';
}
else if (str[i] >= 'A' && str[i] <= 'Z') {
str[i] = (str[i] - 'A' + key) % 26 + 'A';
}
else if (str[i] >= '0' && str[i] <= '9') {
str[i] = (str[i] - '0' + key) % 10 + '0';
}
else if (str[i] >= 0x4e00 && str[i] <= 0x9fa5) {
str[i] = (str[i] - 0x4e00 + key) % (0x9fa5 - 0x4e00 + 1) + 0x4e00;
}
}
}
void decrypt(char* str, int key) {
int len = strlen(str);
for (int i = 0; i < len; i++) {
if (str[i] >= 'a' && str[i] <= 'z') {
str[i] = (str[i] - 'a' - key + 26) % 26 + 'a';
}
else if (str[i] >= 'A' && str[i] <= 'Z') {
str[i] = (str[i] - 'A' - key + 26) % 26 + 'A';
}
else if (str[i] >= '0' && str[i] <= '9') {
str[i] = (str[i] - '0' - key + 10) % 10 + '0';
}
else if (str[i] >= 0x4e00 && str[i] <= 0x9fa5) {
str[i] = (str[i] - 0x4e00 - key + (0x9fa5 - 0x4e00 + 1)) % (0x9fa5 - 0x4e00 + 1) + 0x4e00;
}
}
}
int main() {
char str[] = "Hello, World! 你好,世界!123456";
int key = 3;
printf("Original string: %s\n", str);
encrypt(str, key);
printf("Encrypted string: %s\n", str);
decrypt(str, key);
printf("Decrypted string: %s\n", str);
return 0;
}
```
C语言用递归函数求一维数组中位数
以下是C语言用递归函数求一维数组中位数的代码实现:
```c
#include <stdio.h>
// 递归函数求一维数组中位数
float median(int arr[], int n) {
if (n % 2 == 0) {
return (arr[n / 2 - 1] + arr[n / 2]) / 2.0;
} else {
return arr[n / 2];
}
}
int main() {
int arr[] = {1, 2, 3, 4, 5};
int n = sizeof(arr) / sizeof(arr[0]);
printf("中位数为:%f", median(arr, n));
return 0;
}
```