奇偶调序
来源:互联网 发布:js获取所有data属性 编辑:程序博客网 时间:2024/06/04 12:45
题目:输入一个整数数组,调整数组中数字的顺序,使得所有奇数位于数组的前半部分,
所有偶数位于数组的后半部分。要求时间复杂度为O(n)。
分析:
1. 你当然可以从头扫描这个数组,每碰到一个偶数时,拿出这个数字,并把位于这个
数字后面的所有数字往前挪动一位。挪完之后在数组的末尾有一个空位,这时把该
偶数放入这个空位。由于碰到一个偶数,需要移动O(n)个数字,只是这种方法总的
时间复杂度是O(n2),不符合要求,pass。
2. 很简单,维护两个指针,一个指针指向数组的第一个数字,向后移动;一个指针
指向最后一个数字,向前移动。如果第一个指针指向的数字是偶数而第二个指针指
向的数字是奇数,我们就交换这两个数字。
#include <iostream>using namespace std;void reOrder(int data[],int length){ //简单的边界条件是非常有必要的 if(data==NULL||length==0) return; int *front,*rear; front=data; rear=data+length-1; while(front<rear){ if(*front%2==0){ while(*rear%2!=1){ rear--; } /*int tmp=*front; data[front-data]=*rear; data[rear-data]=tmp;*/ /************************************************************************/ /*上面的代码也行,但下面更好 /* 改变指针解引用值,即改变指针所指向的值,不要怀疑 */ /************************************************************************/ int tmp=*front; *front=*rear; *rear=tmp; rear--; } front++; } for(int i=0;i<length;i++){ cout<<data[i]; }}int main(){ int data[]={2 ,1 ,3 ,4 ,6, 5, 7}; int length=7; reOrder(data,length); system("pause"); return 0;}
0 0
- 奇偶调序
- 奇偶调序
- 102奇偶调序
- 奇偶调序问题
- 奇偶调序
- 奇偶调序
- 奇偶调序
- 【算法】奇偶调序
- 奇偶调序
- 奇偶调序
- 奇偶调序(新的方法实现)
- 数据结构 二分查找/奇偶调序/hash易错点
- 编程艺术第十六~第二十章:全排列/跳台阶/奇偶调序,及一致性Hash算法
- 编程艺术第十六~第二十章:全排列/跳台阶/奇偶调序,及一致性Hash算法
- 编程艺术第十六~第二十章:全排列/跳台阶/奇偶调序,及一致性Hash算法
- 程序员编程艺术--7、全排列,跳台阶,奇偶调序
- 编程艺术第十六~第二十章:全排列/跳台阶/奇偶调序,及一致性Hash算法
- 奇偶排序,双调排序,双调查找
- 移植MonkeyRunner的图片对比和获取子图功能的实现-Appium篇
- Leetcode: Intersection of Two Linked Lists
- LeetCode Sort List 解题报告
- Notification与AlarmManager相结合实现定时本地消息推送
- 分组背包问题解法
- 奇偶调序
- 数据库设计三大范式
- 视频瞳孔跟踪之星团模型
- iOS中UI线程与进程的概述
- Robotium源码分析之Instrumentation进阶
- 让多个Fragment 切换时不重新实例化
- win7安装ads1.2时候将安装程序改成以管理员身份启动+兼容模式
- 你真的懂select吗??
- Android:控件AutoCompleteTextView 自动提示