c语言指针数组元素奇偶排列,关于数组奇偶调序问题的总结
数组的奇偶调序问题,主要考察的是对数组下标或者数组指针的灵活操作。“双下标”策略或者“双指针”策略是屡试不爽的一个方案。
奇偶调序无非有两大类情况:奇偶边排,奇偶混排。
所谓“奇偶边排”,就是奇数排在一边,偶数排在一边。比如说我们让奇数都调整到偶数的前面。
我们可以维护两个index或者两个指针,对奇数和偶数分别进行处理。
如果我们采用头指针和尾指针的方法,比如说头指针维护奇数,尾指针维护偶数:
用数组的index来实现
#include
void xxx(int a[], int len){
//void xxx(int *a, int len){
int index1 = 0; //index1维护奇数
int index2 = len-1; //index2维护偶数
while(index1
if (a[index1]%2 == 1)
{
index1++;
}
else if (a[index2]%2 == 0)
{
index2--;
}
else
{
int temp = a[index1];
a[index1] = a[index2];
a[index2] = temp;
}
}
}
用数组的指针来实现
#include
void xxx(int a[], int len){
//void xxx(int *a, int len){
int *index1 = a; //index1维护奇数
int *index2 = a+len-1; //index2维护偶数
while(index1
if ((*index1)%2 == 1)
{
index1++;
}
else if ((*index2)%2 == 0)
{
index2--;
}
else
{
int temp = *index1;
*index1 = *index2;
*index2 = temp;
}
}
}
如果我们采用快指针和慢指针的方法,比如说慢指针维护奇数,快指针维护偶数:
用数组的index来实现
#include
void xxx(int a[], int len){
//void xxx(int *a, int len){
int index1 = 0; //index1为慢指针
int index2 = 0; //index2为快指针
while(index2<=len-1){
if (a[index2]%2 == 1){
int temp = a[index1];
a[index1] = a[index2];
a[index2] = temp;
index1++;
}
index2++;
}
}
用数组的指针来实现
#include
void xxx(int a[], int len){
//void xxx(int *a, int len){
int *index1 = a; //index1为慢指针
int *index2 = a; //index2为快指针
while(index2<=a+len-1){
if ((*index2)%2 == 1){
int temp = *index1;
*index1 = *index2;
*index2 = temp;
index1++;
}
index2++;
}
}
所谓“奇偶混排”,就是奇数和偶数混合排在一起。比如说我们奇数都在偶数位,偶数都在奇数位。当然这里数组的奇数个数和偶数个数是相等的。
用数组的index来实现
#include
void xxx(int a[], int len){
//void xxx(int *a, int len){
int index1 = 0; //index1维护奇数位
int index2 = 1; //index2维护偶数位
while(index1<=len-2 || index2<=len-1){
if (a[index1]%2 == 1 && a[index2]%2 == 0) //第一个奇数位不是偶数,第一个偶数位不是奇数
{
int temp = a[index1];
a[index1] = a[index2];
a[index2] = temp;
index1 += 2;
index2 += 2;
}
else if (a[index1]%2 == 1) //第一个奇数位是奇数
{
index1 += 2;
}
else if (a[index2]%2 == 0) //第一个偶数位是偶数
{
index2 += 2;
}
else
break;
}
}
用数组的指针来实现
#include
void xxx(int a[], int len){
//void xxx(int *a, int len){
int *index1 = a; //index1维护奇数位
int *index2 = a+1; //index2维护偶数位
while(index1<=a+len-2 || index2<=a+len-1){
if ((*index1)%2 == 1 && (*index2)%2 == 0) //第一个奇数位不是偶数,第一个偶数位不是奇数
{
int temp = *index1; //传指针
*index1 = *index2;
*index2 = temp;
index1 += 2;
index2 += 2;
}
else if ((*index1)%2 == 1) //第一个奇数位是奇数
{
index1 += 2;
}
else if ((*index2)%2 == 0) //第一个偶数位是偶数
{
index2 += 2;
}
else
break;
}
}
对于上面的几种方案,都可以采用如下主程序进行测试:
int main(){
int a[] = {1,2,3,4,5,6};
int len = sizeof(a)/sizeof(int);
for(int i = 0; i
printf("%d ", a[i]);
}
printf("\n");
xxx(a, len);
for(int i = 0; i
printf("%d ", a[i]);
}
printf("\n");
}
c语言指针数组元素奇偶排列,关于数组奇偶调序问题的总结相关推荐
- 在c语言中引用数组元素时,其数组下标的数据类型允许是什么
在c语言中引用数组元素时,其数组下标的数据类型允许是:整型常量或整型表达式.C语言规定只能逐个引用数组元素而不能一次引用整个数组,数据元素的表示形式为"数组名[下标]",下标可以是 ...
- 前端:JS/20/数组(数组的概念,数组元素,数组索引,数组元素的访问,数组的长度,数组的创建方法,数组的操作,实例:使用数组保存个人信息,实例:求数组所有值的平均值,数组对象的length属性)
数组 1,数组的概念 一组值(或对象)的集合,称为"数组": var arr =[10,20,30,50]; var arr =["张三","男&qu ...
- 【C 语言】数组 ( 多维数组操作模型 | 取某个数组元素地址 | 取某个数组元素值 )
文章目录 一.多维数组操作模型 1.取出某个数组元素地址 2.取出某个数组元素值 总结 一.多维数组操作模型 以 // 声明一个多维数组int array[2][3]; 二维数组为例 ; 1.取出某个 ...
- 【C语言】删除元素(函数,数组的扫描)
编写程序,实现删除元素.输入一个递增有序的整型数组A有n个元素,删除下标为i的元素,使其仍保持连续有序.注意,有效下标从0开始. 定义如下两个函数分别实现删除元素操作和数组输出操作. void del ...
- php js动态删除数组元素,javascript如何删除数组中的指定元素
js删除数组中的指定元素主要分为两步,首先判断数组中是否包含这个元素,然后再通过splice()方法来删除指定元素 本篇文章主要介绍的是如何通过javascript语言对数组中的指定元素进行删除的方法 ...
- Numpy 生成 Bool型数组、一维转多维数组reshape、多维转一维数组、替换数组元素、提取数组元素、数组交集、差集、过滤数组元素、二维数组反转行、交换数组维度
1. 创建一个 [3,5] 所有元素为 True 的数组 In [162]: b = np.ones((3,5), dtype=bool)In [163]: b Out[163]: array([[ ...
- new 数组_编程-遍历数组元素N次/填充数组至指定长度
需求如下: 有数组 names=["a","b","c"] 需要遍历数组元素n次,比如: n=2时,期待的输出为:a,b n=5时,期待的输 ...
- java数组元素是类_Java数组及其常用类
本文由疯狂软件教育中心整理,更多Java等高新技术,疯狂软件期待与你交流. 一.JAVA中的数组 (1)数组的定义:是有相同类型的.用一个标识符名称封装到一起的一个对象序列或基本数据类型数据序列. 数 ...
- python numpy 数组元素周围_Python numpy数组元素属性及访问
文章目录 数组对象建立后,我们经常需要查看对象的一些属性特征以及访问或更改元素赋值. 首先我们建立一个数组: import numpy as np data1 = np.array([[1,2,3], ...
最新文章
- 堆溢出攻击(XP SP2 - 2003)
- pandas-事例练习
- 前端开发面试题总结-代码篇
- 英语总结系列(十四):换一种心情充满趣味的二月
- 2021副高考试成绩查询荆州,湖北荆州2021年4月自考成绩查询入口开通
- 微信小程序踩坑- tabBar.list[3].selectedIconPath 大小超过 40kb
- IBM DS STORAGE MANAGER软件
- PS使用技巧(五) 形状工具 U
- 目标跟踪算法研究综述
- Trajan/强连通(石油大学组队赛 B: Thrall’s Dream)
- 算法-猴子运香蕉,看谁剩的多,N种解法
- 反弹shell的各种姿势
- 安卓4.0后新控件TextureView解决SurfaceView在修改默认屏幕方向后(硬件导致)视频方向无法翻转的问题
- ps去水印教程_PS去水印教程:运用色彩原理去除半透明水印
- Java基础篇--集合(collection)
- 如何将动图中多余的去掉?教你快速裁剪动图
- muduo学习笔记:net部分之Http--HttpServer
- 实在智能CEO孙林君:以AI与RPA的深度融合为核心,打造真正人人可用的超级自动化平台 | 数据猿专访...
- 未来有几种?聊聊气候情景(climate scenarios)的故事
- 计算机中模板与母版的区别,模板和模版有啥区别?
热门文章
- 论文阅读 【CVPR-2022】 A Simple Multi-Modality Transfer Learning Baseline for Sign Language Translation
- 【计算理论与算法分析设计】 4. 套圈 (HDU-1007)
- Ubuntu上使用GitHub的步骤
- shop-client 电商项目详解
- 开启Ubuntu 的TFTP Server服务
- 归并排序(C语言完整代码)
- Python—图片大小调节及横坐标为文字的折线图
- vue cli3 默认端口修改
- DOTA PSMA,1702967-37-0,PSMA-617,特异性膜抗原 (PSMA) 的强有效抑制剂
- eve-ng nxosv9k启动问题