描述 题目:输入一个整数数组,调整数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分,奇数部分降序排列输出,偶数部分升序输出。 输入 输入: 1 2 3 4 5 6 7 8 9 10 输出 输出: 9 7 5 3 1 2 4 6 8 10 输入样例 1 1 2 3 4 5 6 7 8 9 10 输出样例 1 9 7 5 3 1 2 4 6 8 10 用c语言写出该代码
时间: 2024-01-02 11:04:49 浏览: 75
21:调整数组顺序使奇数位位于偶数位前面(剑指offer第2版Python)
以下是使用C语言实现的代码:
```c
#include<stdio.h>
void quick_sort(int arr[], int left, int right) {
if (left >= right) return;
int pivot = arr[left], i = left + 1, j = right;
while (i <= j) {
if (arr[i] >= pivot && arr[j] < pivot) {
int tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
i++;
j--;
}
if (arr[i] < pivot) i++;
if (arr[j] >= pivot) j--;
}
arr[left] = arr[j];
arr[j] = pivot;
quick_sort(arr, left, j - 1);
quick_sort(arr, j + 1, right);
}
void sort(int arr[], int len) {
int i = 0, j = len - 1;
while (i < j) {
while (i < j && arr[i] % 2 != 0) i++;
while (i < j && arr[j] % 2 == 0) j--;
if (i < j) {
int tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
}
quick_sort(arr, 0, i - 1);
quick_sort(arr, i, len - 1);
}
int main() {
int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int len = sizeof(arr) / sizeof(arr[0]);
sort(arr, len);
for (int i = 0; i < len; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
```
该代码先使用双指针法将奇数和偶数分别放到数组的前半部分和后半部分,然后对奇数部分和偶数部分分别进行快速排序,奇数部分按降序排列,偶数部分按升序排列。最后输出排序后的数组。
阅读全文