c++输入10个整数,完成一个函数使数据 重新排序以后输出(也按空格分隔),要求: 输出奇数在前偶数在后 函数接口定义: void sort_tarray ( int* a );
时间: 2023-09-13 12:05:24 浏览: 130
### 回答1:
下面是一个C语言的实现,根据题目要求,我们可以先将数组中的奇数和偶数分别存放到两个新数组中,然后再将它们合并成一个新数组,最后输出即可。
```c
void sort_tarray(int* a) {
int odd[10], even[10], odd_count = 0, even_count = 0;
for (int i = 0; i < 10; i++) {
if (a[i] % 2 == 0) {
even[even_count++] = a[i];
} else {
odd[odd_count++] = a[i];
}
}
for (int i = 0; i < odd_count; i++) {
printf("%d ", odd[i]);
}
for (int i = 0; i < even_count; i++) {
printf("%d ", even[i]);
}
}
```
使用时可以先定义一个整型数组,然后将需要排序的数据存储到数组中,最后调用上述函数即可。
```c
int main() {
int a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
sort_tarray(a);
return 0;
}
```
### 回答2:
现给出一个函数实现的思路:
1. 首先定义两个指针,一个指向数组的开头位置(即a[0]),一个指向数组的末尾位置(即a[9]);
2. 循环遍历数组,判断当前位置的数字是奇数还是偶数;
3. 如果是奇数,则指针向后移动一位,继续判断下一个位置的数字;
4. 如果是偶数,则将该偶数与指针指向的位置的数字进行交换,并将指针向前移动一位;
5. 重复步骤3和步骤4,直到指针指向的位置超过了另一个指针指向的位置;
6. 最后输出排序后的数组。
以下是具体实现代码:
void sort_tarray(int* a) {
int *start = a; // 指向数组开头的指针
int *end = a + 9; // 指向数组末尾的指针
while (start < end) {
if (*start % 2 == 1) { // 如果是奇数,则指针向后移动一位,继续判断下一个位置的数字
start++;
}
else { // 如果是偶数,则将该偶数与指针指向的位置的数字进行交换,并将指针向前移动一位
int temp = *start;
*start = *end;
*end = temp;
end--;
}
}
// 输出重新排序后的数组
for (int i = 0; i < 10; i++) {
cout << a[i] << " ";
}
}
### 回答3:
可以使用双指针法来实现奇偶数的重新排序。
首先,定义两个指针left和right,初始时left指向数组的第一个元素,right指向数组的最后一个元素。
然后,通过循环判断left指针指向的元素是否为奇数,如果是奇数,则将left指针向右移动一位,否则将right指针指向的元素向后移动一位,直到找到第一个奇数和第一个偶数。
接下来,将 left指针和right指针指向的元素进行交换,并分别将left指针向右移动一位,right指针向左移动一位。
重复以上步骤,直到left指针和right指针相遇。
最后,数组中的奇数和偶数就会重新排序。
以下是实现该函数的代码:
```cpp
void sort_tarray(int* a) {
int left = 0;
int right = 9;
while (left < right) {
while (a[left] % 2 != 0 && left < right) { // 找到第一个偶数
left++;
}
while (a[right] % 2 == 0 && left < right) { // 找到第一个奇数
right--;
}
if (left < right) {
int temp = a[left];
a[left] = a[right];
a[right] = temp;
left++;
right--;
}
}
}
```
调用该函数后,原数组中的奇数会排在偶数的前面。
阅读全文