实现奇偶数的重排问题实验报告
时间: 2023-06-01 13:04:34 浏览: 213
实验目的:
掌握奇偶数的重排算法。
实验原理:
奇偶数的重排算法是指将一个数组中的奇数和偶数分别排在数组的左边和右边。具体实现方式是:从数组的左边开始,找到第一个偶数,然后从数组右边开始,找到第一个奇数,将两个数交换位置,一直重复这个过程,直到左右指针相遇为止。
实验步骤:
1.定义一个整型数组,并初始化数组元素。
2.定义左右指针,分别指向数组的左右两端。
3.从左边开始遍历数组,找到第一个偶数。
4.从右边开始遍历数组,找到第一个奇数。
5.将左右指针指向的两个数交换位置。
6.继续执行第3步至第5步,直到左右指针相遇为止。
7.输出重排后的数组。
实验结果:
输入:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
输出:[1, 9, 3, 7, 5, 6, 4, 8, 2, 10]
实验结论:
通过奇偶数的重排算法,可以将一个数组中的奇数和偶数分别排在数组的左边和右边。这种算法的时间复杂度为O(n),是一种非常高效的算法。
相关问题
实现奇偶数的重排问题C语言代码
以下是奇偶数重排问题的C语言代码:
```c
#include <stdio.h>
#define MAX_SIZE 100
void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
void paritySort(int arr[], int n) {
int i = 0, j = n - 1;
while (i < j) {
while (arr[i] % 2 == 1 && i < j) {
i++;
}
while (arr[j] % 2 == 0 && i < j) {
j--;
}
if (i < j) {
swap(&arr[i], &arr[j]);
}
}
}
int main() {
int arr[MAX_SIZE], n;
printf("Enter the size of the array: ");
scanf("%d", &n);
printf("Enter the elements of the array: ");
for (int i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
paritySort(arr, n);
printf("The sorted array is: ");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
return 0;
}
```
代码实现中使用了一个 `swap` 函数,用于交换数组中两个元素的位置。`paritySort` 函数通过两个指针 `i` 和 `j` 分别从数组的左右两端开始向中间遍历,当左指针指向的元素为奇数时,向右移动左指针,当右指针指向的元素为偶数时,向左移动右指针,最后当左指针小于右指针时交换两个指针指向的元素。这样,经过一次遍历之后,奇数和偶数就被分别排到了数组的左右两端,然后我们可以递归的对左右两个子数组进行同样的排序操作,最终得到一个完整的奇偶数重排的数组。
用cpp实现奇偶数的分离与输出
在C++中,我们可以使用循环和条件语句来分离并输出整数数组中的奇数和偶数。下面是一个简单的示例:
```cpp
#include <iostream>
#include <vector>
// 函数用于分离并输出奇数
void separateOdd(std::vector<int>& nums) {
for (int num : nums) {
if (num % 2 != 0) { // 如果数字是奇数
std::cout << num << " is odd, ";
}
}
}
// 函数用于分离并输出偶数
void separateEven(std::vector<int>& nums) {
for (int num : nums) {
if (num % 2 == 0) { // 如果数字是偶数
std::cout << num << " is even, ";
}
}
}
int main() {
std::vector<int> numbers = {1, 2, 3, 4, 5, 6, 7, 8, 9};
std::cout << "Separating and outputting odd numbers: ";
separateOdd(numbers);
std::cout << "\nSeparating and outputting even numbers: ";
separateEven(numbers);
return 0;
}
```
在这个例子中,我们首先定义了两个函数`separateOdd`和`separateEven`,分别遍历数组,如果元素是奇数则输出它是奇数,如果是偶数则输出它是偶数。在`main`函数里,我们创建了一个包含数字的向量,并调用这两个函数。
阅读全文