例如我们输入一个数组 arr[]={1,2,3,4,5,6,7,8,9,10}
调整数组使得奇数全部都位于偶数前面
得到{1,3,5,7,9,2,4,6,8,10}
这里类似于冒泡排序的思想,我们在这里创建一个边界bount,初始化值为0
遍历一次数组,比较前后两个数的奇偶性,如果前面的数为偶数,后面的数是奇数,我们将两个数进行交换,这里需要创建一个Swap函数如下(判断奇偶性质,用%2来判断)
void Swap(int* x, int* y){
int tmp = 0;
tmp=*x;
*x = *y;
*y = tmp;
}
每次找奇数,循环一次,找到一个奇数,并放到合适位置
[0,bound)表示已排序区间
[bound,size)表示待排序区间(size为数组长度)
具体函数如下:
void Separate(int* arr, int size){
//每次找奇数的方式
//[0,bound)已排序区间
//[bound,size)待排序区间
for (int bound = 0; bound < size; bound++){
//循环执行一次,bound+1
//此时找到一个比较小的值,并放到合适位置;
for (int cur = size - 1; cur>bound; cur--){
//完成一趟找奇数的过程
if (arr[cur]%2==1&& arr[cur-1]%2==0){
Swap(&arr[cur - 1], &arr[cur]);//判断奇偶性,当前偶后奇即不符合要求,将两个数进行交换
}
}
}
}
总函数如下:
Swap(int* x, int* y){
int tmp = 0;
tmp = *x;
*x= *y;
*y = tmp;
}
void Separate(int* arr, int size){
for (int bound = 0; bound < size; bound++){
for (int cur = size - 1; cur>bound; cur--){
if (arr[cur]%2==1&& arr[cur-1]%2==0){
Swap(&arr[cur - 1], &arr[cur]);
}
}
}
}
int main(){
int arr[] = { 1,2,3,4,5,6,7,8,9,10};
int size = sizeof(arr) / sizeof(arr[0]);
Separate(arr, size);
for (int i = 0; i < size; i++){
printf("%d ", arr[i]);
}
system("pause");
return 0;
}

1400



被折叠的 条评论
为什么被折叠?



