题目描述:

写一个函数,该函数的功能:调整一个数组中数字的顺序,使得数组中所有的奇数位于所有偶数的前面。

思路:

1. 给定两个下标left和right,left放在数组的起始位置,right放在数组中最后一个元素的位置
 2. 循环进行一下操作
 a. 如果left和right表示的区间[left, right]有效,进行b,否则结束循环
 b. left从前往后找,找到一个偶数后停止
 c. right从后往前找,找到一个奇数后停止
 d. 如果left和right都找到了对应的数据,则交换,继续a

void swap_arr(int arr[], int sz)
{int left = 0;int right = sz - 1;int tmp = 0;while (left < right){// 从前往后,找到一个偶数,找到后停止while (arr[left] % 2 == 1){left++;}// 从后往前找,找一个奇数,找到后停止while ( arr[right] % 2 == 0){right--;}// 如果偶数和奇数都找到,交换这两个数据的位置// 然后继续找,直到两个指针相遇if (left < right){tmp = arr[left];arr[left] = arr[right];arr[right] = tmp;}}
}int main(void)
{int arr[] = { 1,2,3,4,5,6,7,8,9,10 };int sz = sizeof(arr) / sizeof(arr[0]);swap_arr(arr, sz);int i = 0;for (i = 0; i < sz; i++)printf("%d ", arr[i]);return 0;
}

这个代码在全偶数或全奇数时会发生  right  和 left 越界  的问题。

数组为全奇数时: 发现left为9 越界了

数组为全偶数时,right 越界了。

因此,我们需要在 while 循环的条件中再加一个条件:(left<right)。

改进后的程序:

# include <stdio.h>
void swap_arr(int arr[], int sz)
{int left = 0;int right = sz - 1;int tmp = 0;while (left < right){// 从前往后,找到一个偶数,找到后停止while ((left < right) && (arr[left] % 2 == 1)){left++;}// 从后往前找,找一个奇数,找到后停止while ((left < right) && (arr[right] % 2 == 0)){right--;}// 如果偶数和奇数都找到,交换这两个数据的位置// 然后继续找,直到两个指针相遇if (left < right){tmp = arr[left];arr[left] = arr[right];arr[right] = tmp;}}
}int main(void)
{int arr[] = { 11,12,24,28,37,58,59,667,891,990,10011,222,537 };int sz = sizeof(arr) / sizeof(arr[0]);swap_arr(arr, sz);for (int i = 0; i < sz; i++){printf("%d ", arr[i]);}return 0;
}

输出结果:

数组为全偶数时:

数组为全奇数时:

调整奇数偶数顺序(C语言实现)相关推荐

  1. c语言智力题 操作符详解例题 数据存储 指针初阶 水仙花数 杨辉三角 逆序字符串 喝汽水问题 打印图形 猜凶手 使用指针打印数组内容 调整奇数偶数顺序 运动员猜名次

    [题目名称] 下面代码的结果是:a #include <stdio.h> int i; int main() {i--; //sizeof'的返回值是无符号整型if (i > siz ...

  2. C语言:调整奇数偶数顺序

    输入一个整数数组,实现一个函数,来调整该数组中数字的顺序 来使得数组中所有的奇数位于数组的前半部分.所有的偶数位于数组的后半部分. 比如现在有数组arr: 1 2 3 4 5 6 思路1:大部分同学第 ...

  3. 【C语言】调整奇数偶数顺序

    内容: 输入一个整数数组,实现一个函数, 来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分, 所有偶数位于数组的后半部分. 解题思路: 一般情况下数组中可能是奇偶交替,而题目中让我们把奇 ...

  4. 剑指offer之 调整奇数偶数数组位置

    package Problem14;/** 问题描述:* 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位与数组的前半部分,所有偶数位与数组的* 后半部分*/ public cl ...

  5. 1019: 奇数偶数(C语言)

    题目描述 输入一个整数,判断该数是奇数还是偶数. 输入 输入整数n. 输出 如果该数是奇数就输出"odd",偶数就输出"even"(输出不含双引号). 样例输入 ...

  6. 【C语言练习——调整数组内奇数偶数的顺序】

    调整奇数偶数顺序 前言 1.不改变元素顺序 2.改变元素的顺序 总结 前言 调整数组里的奇数偶数的顺序,使奇数全部都位于偶数前面. 1.不改变元素顺序 首先将奇数都调整到数组的前面 然后将偶数都调整到 ...

  7. java链表奇数倒序偶数顺序_将链表中的所有元素为奇数的节点移到元素为偶数节点的前面,并保证奇数之间顺序不变,偶数之间顺序不变。...

    2.将链表中的所有元素为奇数的节点移到元素为偶数节点的前面,并保证奇数之间顺序不变,偶数之间顺序不变. 示例: 交换前链表的顺序             交换后链表的顺序 4→5→3→1→2   == ...

  8. 奇偶数分离c语言,如何把一个整型数组中,奇数偶数进行分离 怎么使数组进行奇偶奇偶相间排序...

    导航:网站首页 > 如何把一个整型数组中,奇数偶数进行分离 怎么使数组进行奇偶奇偶相间排序 如何把一个整型数组中,奇数偶数进行分离 怎么使数组进行奇偶奇偶相间排序 相关问题: 匿名网友: imp ...

  9. c语言判断奇数偶数_使用C语言宏检查偶数或奇数

    c语言判断奇数偶数 There are many ways to check whether a given number is EVEN or ODD, which we have already ...

最新文章

  1. Linux服务器网络故障诊断
  2. Exchange日常管理之二十二:配置保留策略
  3. iOS tableview性能优化及分析
  4. python 日历_python中的日历和时间
  5. 如何查看开发者账号何时到期
  6. Python中join 和 split详解
  7. Set精讲(Java)·算法常用集合处理方法
  8. linux安装meb工具,linux-docker下安装禅道全部
  9. cola,一个做consensus clustering的R包
  10. python后端开发web_最简易的python web框架的后端实现
  11. be my friend
  12. 独家!337页大数据与建模核心资料,免费领取!
  13. 二分法查找python的实现
  14. 编译WINDOWS版FFmpeg:编译SDL
  15. java 拼音_JAVA实现汉字转换为拼音 pinyin4j/JPinyin
  16. 数独游戏技巧从入门到精通_免费教学视频数独阶梯训练让孩子从入门到精通,数学思维直线上升!...
  17. 分享工作上的一些体会
  18. 在线CRM客户管理系统有好用的吗?这5款千万别错过!
  19. STM32使用SPI方式读写SD 卡
  20. 解决 升级到Fedora 26后,VirtualBox、Remmina远程桌面等内部不能使用 Win, Ctrl+TAB等快捷键

热门文章

  1. Qt WtOPCSvr 物联网云平台 项目实战开发
  2. hive分区、数据加载、数据导出、数据类型
  3. Axure 9 旋转的唱片制作方法
  4. 张玉清 国家计算机网络,张玉清-中国科学院大学-UCAS
  5. 两台电脑ping不通的解决方案
  6. 学生信息管理系统的解析
  7. 【GANs学习笔记】(十五)EBGAN、BEGAN
  8. c语言接口作用是什么,单片机接口C语言开发技术
  9. js-xlsx 进行 excel 导出
  10. RS232电平、CMOS电平、TTL电平区别