zoukankan      html  css  js  c++  java
  • 数据结构-调整数组顺序使奇数位于偶数前面

    题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。

    分析:首先想到的是进行遍历,然后移到后面,但是效率O(n^2)。所以考虑使用首尾指针,可进行直接交换数据。但是这里考虑一下拓展性。

    /*
    剑指offer面试题14
    */
    #include <iostream>
    
    using namespace std;
    /*
    void ReorderOddEven(int* a,int low,int high){
        if(a == NULL || high <= low){
            return;
        }
    
        while(high > low){
            while(a[low] & 1){
                low++;
            }
            while(!(a[high] & 1)){
                high--;
            }
            if(low - high == 1){
                break;
            }
            int tmp = a[low];
            a[low] = a[high];
            a[high] = tmp;
        }
    }
    */
    
    /*
    上面注释的代码,为常规的实现方法。
    下面是可拓展的代码。例如题目换成前半部是可以除于3或者是正数
    这会只需要改下IsEven函数
    */
    bool IsEven(int n){
        return (n & 1) == 0;
    }
    
    void ReOrder(int* a,int low,int high,bool (*func)(int)){
        if(a == NULL || high <= low){
            return;
        }
    
        while(high > low){
            while(!func(a[low]) && high > low){
                low++;
            }
            while(func(a[high]) && high > low){
                high--;
            }
            if(low - high == 1){
                break;
            }
            int tmp = a[low];
            a[low] = a[high];
            a[high] = tmp;
        }
    }
    
    void ReorderOddEven(int* a,int low,int high){
        ReOrder(a,low,high,IsEven);
    }
    
    int main()
    {
        int a[] = {1,5,2,1,4,1,5,6,1,5,2,1};
        int n = sizeof(a)/sizeof(*a);
    
        ReorderOddEven(a,0,n-1);
    
        for(int i=0;i<n;i++){
            cout << a[i] << " ";
        }
    
        return 0;
    }
  • 相关阅读:
    字幕文件srt处理之pysrt
    python 多进程代码问题以及用 pyinstaller 打包成exe 问题解决
    ffmpeg的安装以及使用
    人声识别之webrtcvad
    python3安装dlib库和face_recognition库
    python实现 请按任意键继续。。。
    python 模块tkinter之filedalog
    古诗文网验证码识别
    xpath案例-全国城市名爬取
    xpath案例-4K图片爬取
  • 原文地址:https://www.cnblogs.com/wn19910213/p/3722119.html
Copyright © 2011-2022 走看看