这篇文章讲一下关于奇偶排序的习题
目录
调整奇数偶数顺序
调整奇数偶数顺序调整数组使奇数全部都位于偶数前面。
输入一个整数数组,实现一个函数,来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分,所有偶数位于数组的后半部分。
- 思路:题目要求把奇数排在偶数前面,我们可以定义两个指针,第一个指针从前往后找偶数,如果遇到奇数就指针+1找下一个,同理第二个指针从后往前找奇数,如果遇到偶数就指针-1找上一个。
代码实现:
void ustable_array(int *array, int sz)
{
int* left = array;
int* right = array+sz-1;
while (left < right)//必须是左下标小于右下标
{
//一对
while ((left < right) && *left % 2 != 0)//left指针找偶数
{
left++;//遇到奇数就跳过找下一个
}
while ((left < right) && *right % 2 == 0)//right指针找奇数
{
right--;//遇到偶数就跳过找上一个
}
//交换
if (left < right)
{
int tmp = *left;
*left = *right;
*right = tmp;
}
}
}
print(int array[], int sz)
{
int i = 0;
for (i = 0; i < sz; i++)
{
printf("%d ", array[i]);
}
}
int main()
{
int array[10] = { 0,1,2,3,4,5,6,7,8,9 };
int sz = sizeof(array) / sizeof(array[0]);
ustable_array(array, sz);
print(array, sz);
return 0;
}
使用qort函数进行奇偶排序
#include<stdlib.h>
#include<stdio.h>
print(int arr[], int sz)
{
int i = 0;
for (i = 0; i < sz; i++)
{
printf("%d ", arr[i]);
}
}
int Odd_bfr(int x) {//奇数在前
return !(x % 2);
}
int cmp(const void* p1, const void* p2) {
return Odd_bfr(*(int*)p1) - Odd_bfr(*(int*)p2);
}
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,0 };
int sz = sizeof(arr) / sizeof(arr[0]);
qsort(arr, sz, sizeof(int), cmp);
print(arr, sz);
return 0;
}