• 数据结构-调整数组顺序使奇数位于偶数前面


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

    分析:首先想到的是进行遍历,然后移到后面,但是效率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;
    }
  • 相关阅读:
    vue列表渲染之基本列表
    vue之列表排序计算属性的应用
    IDEA部署远程部署docker
    springboot多数据源《二》
    docker容器之间的通信方式
    batocera添加游戏
    DarwinStreamingServer
    ffmepg,视频流,Darwin Streaming Server, EasyDarwin
    @Cacheable unless的写法,绕不开的SpEL
    绘文字emoji
  • 原文地址:https://www.cnblogs.com/wn19910213/p/3722119.html
Copyright © 2020-2023  润新知