使用指针法实现:数组中有n个正整数,要求将它们从小到大排序,并且奇数在前偶数在后
时间: 2023-12-24 08:06:12 浏览: 76
好的,以下是使用指针法实现将数组中的n个正整数从小到大排序,奇数在前偶数在后的代码:
```c++
#include <iostream>
using namespace std;
void sort(int* arr, int n) {
int* left = arr; // 指针left指向数组的第一个元素
int* right = arr + n - 1; // 指针right指向数组的最后一个元素
while (left < right) {
if (*left % 2 == 0 && *right % 2 == 1) { // 如果左侧元素为偶数,右侧元素为奇数,则交换它们
int temp = *left;
*left = *right;
*right = temp;
}
if (*left % 2 == 1) { // 如果左侧元素为奇数,则指针left右移
left++;
}
if (*right % 2 == 0) { // 如果右侧元素为偶数,则指针right左移
right--;
}
}
// 按从小到大的顺序排序奇数和偶数
for (int i = 0; i < n; i++) {
for (int j = i + 1; j < n; j++) {
if (*(arr + i) % 2 == 1 && *(arr + j) % 2 == 1 && *(arr + i) > *(arr + j)) { // 如果两数都是奇数,且前一个数大于后一个数,则交换它们
int temp = *(arr + i);
*(arr + i) = *(arr + j);
*(arr + j) = temp;
}
else if (*(arr + i) % 2 == 0 && *(arr + j) % 2 == 0 && *(arr + i) > *(arr + j)) { // 如果两数都是偶数,且前一个数大于后一个数,则交换它们
int temp = *(arr + i);
*(arr + i) = *(arr + j);
*(arr + j) = temp;
}
}
}
}
int main() {
int n;
cout << "请输入数组的长度:";
cin >> n;
int* arr = new int[n];
cout << "请输入数组的元素(以空格分隔):";
for (int i = 0; i < n; i++) {
cin >> *(arr + i);
}
sort(arr, n);
cout << "排序后的数组为:";
for (int i = 0; i < n; i++) {
cout << *(arr + i) << " ";
}
delete[] arr;
return 0;
}
```
代码说明:
1. sort函数中,指针left指向数组的第一个元素,指针right指向数组的最后一个元素,通过循环遍历数组,如果左侧元素为偶数,右侧元素为奇数,则交换它们;如果左侧元素为奇数,则指针left右移;如果右侧元素为偶数,则指针right左移。
2. 排序奇数和偶数时,使用两层循环,外层循环控制数组的元素,内层循环用于比较相邻的两个元素是否需要交换。如果两数都是奇数,且前一个数大于后一个数,则交换它们;如果两数都是偶数,且前一个数大于后一个数,则交换它们。