四川信德建设有限公司网站昆明优化网站公司
news/
2025/9/27 1:04:39/
文章来源:
四川信德建设有限公司网站,昆明优化网站公司,制作什么网站好,自动全屏网站模板题目#xff1a;
输入一个整数数组#xff0c;实现一个函数#xff0c;来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分#xff0c;所有偶数位于数组的后半部分。 示例#xff1a;{4#xff0c;6#xff0c;5#xff0c;7#xff0c;2#xff0c;3…题目
输入一个整数数组实现一个函数来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分所有偶数位于数组的后半部分。 示例{4657231} 输出{5731462}
1.冒泡法
冒泡法的逻辑是前后两个元素对比如果前一个是偶数后一个是奇数就前后交换这样进行 元素个数-1趟排查
代码实现
#includestdio.h
void _swap(int* arr, int sz)
{int i 0,j0;int flag 0;for (i 0;i sz-1;i){flag 0;for (j 0;j sz - 1 - i;j)//排好的后面的偶数就不用动了{if (arr[j] % 2 0 arr[j 1] % 2 ! 0){int tem 0;tem arr[j];arr[j] arr[j 1];arr[j 1] tem;flag 1;}}if (flag 0)//要是一趟中一个没换就说明已经排好了break;}
}
void _printf(int* arr, int sz)
{int i 0;for (i 0;i sz;i){printf(%d , arr[i]);}
}
int main()
{int arr[] { 1,2,4,5,7,6,8 };int sz sizeof(arr) / sizeof(arr[0]);_swap(arr, sz);_printf(arr, sz);
}这里引入了flag变量为了判断是否在某一趟时数组元素已经排好排好就跳出节省了后面步骤
2.二分法
逻辑从前后两边分别开始遍历 左边遍历到偶数停下来是奇数继续往后走 右边遍历到奇数停下来是偶数继续往前走
#includestdio.h
#includeassert.h
int* _swap(int* arr, int sz)
{int left 0;int right sz - 1;int* ret arr;assert(arr ! NULL);while (left right){while ((left right) arr[left] % 2 1)left;while ((left right) arr[right] % 2 0)right--;if (left right)//当前面两个while是因为不满足leftright//跳出来时就不能交换了{int tem 0;tem arr[left];arr[left] arr[right];arr[right] tem;}}return ret;
}
void _printf(int* arr, int sz)
{int i 0;for (i 0;i sz;i){printf(%d , arr[i]);}
}
int main()
{int arr[] { 1,5,4,7,9,8,3,2,6 };int sz sizeof(arr) / sizeof(arr[0]);_swap(arr, sz);_printf(arr, sz);return 0;
}细节
1.没到中间说明还有没遍历的元素进循环 2.3. 同理只要left和right中间还有元素就进循环继续遍历 4. 如果 2. 和 3.的循环是因为leftright而跳出的话这里的条件就会限制交换不让它俩交换如果没有这个条件限制就换错了
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/918971.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!