调整数组使奇数全部都位于偶数前面
2015-11-17 23:56
253 查看
调整数组使奇数全部都位于偶数前面。题目:输入一个整数数组,实现一个函数,来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分,所有偶数位于数组的后半部分。方法一:从两边往中间进行判断,通过模除运算(num%2是否为0)寻找奇偶数,然后互换。
#include<stdio.h> #include<assert.h> #include<stdlib.h> void adjust(int *arr,int len) { assert(arr); int *p1 = arr; int *p2 = arr + len - 1; if (p1 == NULL || len == 0)//如果该整型数组为空,进行空操作 { return; } while (p1 < p2) {//从两边往中间进行判断奇偶 if((p1 < p2) && (*p2 % 2 == 0))//从后往前找奇数 p2--; if((p1 < p2) && (*p1 % 2 != 0))//从前往后找偶数 p1++; if (p1 < p2)//将两个数(奇数放在前面,偶数放在后面)交换 { int temp = *p1; *p1 = *p2; *p2 = temp; } } } int main() { int arr[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; int i,len = sizeof(arr) / sizeof(arr[0]); adjust(arr,len); for (i = 0; i < len;i++) { printf("%d ", arr[i]); } system("pause"); return 0; }方法二:从两边往中间进行判断,通过num&1寻找奇偶数,然后互换。如果num&1==1,则num为奇函数;如果num&1==0,则num为偶函数。
#include<stdio.h> #include<assert.h> #include<stdlib.h> void adjust(int *arr, int len) { assert(arr); int *start = arr; int *end = arr + len - 1; if (start == NULL || len == 0)//如果该整型数组为空,进行空操作 { return; } while (start < end) { while ((*start & 1) == 1)//*arr&1==1时*arr为奇数, { start++; } while ((*end & 1) == 0)//*arr&1==0时*arr为偶数 { end--; } if (start < end)//将两个数(奇数放在前面,偶数放在后面)交换 { int temp = *start; *start++ = *end; *end-- = temp; } } } int main() { int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; int len = sizeof(arr) / sizeof(arr[0]); adjust(arr, len); for (int i = 0; i < len; i++) { printf("%d ", arr[i]); } system("pause"); return 0; }
相关文章推荐
- ruby 数组使用教程
- Ruby中的数组和散列表的使用详解
- C#实现AddRange为数组添加多个元素的方法
- C#动态调整数组大小的方法
- 详解Lua中的数组概念知识
- Perl中的列表和数组学习笔记
- 探索PowerShell (八) 数组、哈希表(附:复制粘贴技巧)
- C#中数组初始化与数组元素复制的方法
- C#交错数组用法实例
- Linux Shell 数组建立及使用技巧
- PowerShell数组的一些操作技巧
- C#通过yield实现数组全排列的方法
- C#不重复输出一个数组中所有元素的方法
- C#实现将数组内元素打乱顺序的方法
- Ruby简明教程之数组和Hash介绍
- C语言查找数组里数字重复次数的方法
- C语言柔性数组实例详解
- Perl中怎样从数组中删除某个值?
- 详解C++编程中用数组名作函数参数的方法
- C语言安全之数组长度与指针实例解析