题目:输入一个整数数组,调整数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分,奇数部分降序排列输出,偶数部分升序输出。
时间: 2023-06-02 22:06:27 浏览: 190
好的,这个问题可以解答。以下是代码实现:
```python
def sortArray(nums):
odd_nums = [x for x in nums if x % 2 != 0]
even_nums = [x for x in nums if x % 2 == 0]
odd_nums = sorted(odd_nums, reverse=True)
even_nums = sorted(even_nums)
return odd_nums + even_nums
result = sortArray([1, 2, 3, 4, 5, 6, 7, 8, 9])
print(result) # 输出 [9, 7, 5, 3, 1, 2, 4, 6, 8]
```
这个函数首先将奇数和偶数分开,然后对奇数和偶数分别排序,最后连接起来返回。
相关问题
描述 题目:输入一个整数数组,调整数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分,奇数部分降序排列输出,偶数部分升序输出。 输入 输入: 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语言写出该代码
以下是使用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;
}
```
该代码先使用双指针法将奇数和偶数分别放到数组的前半部分和后半部分,然后对奇数部分和偶数部分分别进行快速排序,奇数部分按降序排列,偶数部分按升序排列。最后输出排序后的数组。
从键盘输入8个整数存放在一个数组中,然后将奇数和偶数分别存入到两个不同的数组中,并按奇数、偶数交替的顺序输出这两个数组中的所有数据 (先交替输出,如果奇数个数多,则再输出剩下的奇数,如果偶数个数多,则再输出剩下的偶数)。 奇数偶数俩数组 长度 加起来 不能超过8
下面是实现这个功能的 C++ 代码:
```c++
#include <iostream>
using namespace std;
int main() {
int arr[8];
int odd[4], even[4]; // 奇数和偶数数组
int odd_count = 0, even_count = 0; // 奇数和偶数计数器
// 输入8个整数
cout << "输入8个整数:" << endl;
for (int i = 0; i < 8; i++) {
cin >> arr[i];
}
// 分别存入奇数和偶数数组
for (int i = 0; i < 8; i++) {
if (arr[i] % 2 == 1) { // 奇数
if (odd_count < 4) { // 奇数数组未满
odd[odd_count++] = arr[i];
}
} else { // 偶数
if (even_count < 4) { // 偶数数组未满
even[even_count++] = arr[i];
}
}
}
// 按奇数、偶数交替的顺序输出这两个数组中的所有数据
int odd_idx = 0, even_idx = 0;
while (odd_idx < odd_count && even_idx < even_count) {
if (odd_idx <= even_idx) { // 先输出奇数
cout << odd[odd_idx++] << " ";
} else { // 再输出偶数
cout << even[even_idx++] << " ";
}
}
// 如果奇数个数多,则再输出剩下的奇数
while (odd_idx < odd_count) {
cout << odd[odd_idx++] << " ";
}
// 如果偶数个数多,则再输出剩下的偶数
while (even_idx < even_count) {
cout << even[even_idx++] << " ";
}
cout << endl;
return 0;
}
```
注意,由于题目要求奇数偶数两个数组长度加起来不能超过8,因此这里我们将奇数和偶数数组的长度都设置为4。如果输入的数中奇数和偶数的个数超过了4个,那么多余的数将被忽略。
阅读全文