📅  最后修改于: 2023-12-03 14:40:25.846000             🧑  作者: Mango
在本文中,我们将探讨如何使用 C 编程语言编写一个能够将奇偶数分别排序的程序。
我们可以利用两个指针,一个从数组开头向后扫描,另一个从数组末尾向前扫描。如果左边的指针位置上的数是偶数,右边的指针位置上的数是奇数,那么就将两个数交换位置。
在一趟排序中,我们至少能将一个奇数和一个偶数交换位置,因此排序次数的上限为数组长度的一半。如果经过排序后,仍然有未排序的数,我们就可以接着使用同样的方法排序,直到所有数都排好序。
下面是我们排序奇偶数的程序实现:
#include <stdio.h>
void sort(int arr[], int n) {
int i = 0;
int j = n - 1;
while (i < j) {
while (i < j && arr[i] % 2 == 0) {
i++;
}
while (i < j && arr[j] % 2 == 1) {
j--;
}
if (i < j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
i++;
j--;
}
}
}
int main() {
int arr[] = {3, 5, 2, 8, 7, 6, 1, 4};
int n = sizeof(arr) / sizeof(arr[0]);
printf("原始数组:\n");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
sort(arr, n);
printf("\n排序后数组:\n");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
return 0;
}
在上面的程序中,我们首先定义了一个 sort()
函数,该函数以排序后的数组和数组长度为参数。函数内部使用两个指针,分别指向数组的开头和结尾,然后扫描数组,用上面的算法将奇数和偶数分别排序。
在 main()
函数中,我们首先定义了一个数组,并手动初始化。然后我们调用 sort()
函数进行排序,并按照顺序输出排序后的数组。
从输出结果可以看出,我们已经成功地实现了奇偶数排序的程序。通过这个例子,我们深入理解了如何思考和解决实际问题的能力。
完整的代码片段已经被上面包含,你可以将代码复制到 C 编译器中进行实验。