zoukankan      html  css  js  c++  java
  • (数组)数组排序,使所有奇数在左边,所有偶数在右边

    题目:

    在一个N个整数数组里面,有多个奇数和偶数,设计一个排序算法,令所有的奇数都在左边。
    请完成sort的代码实现(C++或Java)

    C++:
    void sort(int N, int[]a)
    {
        …
    }

    例如: 当输入a = {8,4,1,6,7,4,9,6,4},
    a = {1,7,9,8,4,6,4,6,4}为一种满足条件的排序结果

    思路:

    1、Partition过程,从数组左右两边往中间扫,找到左边第一个偶数,找到右边第一个奇数,然后左右交换,直至二者相遇。

    2、遍历数组,遇到奇数则将它依次放在左边的位置,并与该位置的偶数交换,即第1个奇数放在第1个位置,第2个奇数放在第2个位置。。。具体实现参考代码。

    代码:

    #include <iostream>
    
    using namespace std;
    
    void swap(int &a,int &b){
        int tmp;
        tmp=a;
        a=b;
        b=tmp;
    }
    
    void sort_1(int n,int a[]){
        int left=0,right=n-1;
        while(left<right){
            while((a[left]&1)==1 && (left<right)) left++;
            while((a[right]&1)==0 && (left<right)) right--;
            if(left<right){
                swap(a[left],a[right]);
                left++;
                right--;
            }
        }
    }
    
    void sort_2(int n,int a[]){
        int cnt=0;
        int tmp;
        for(int i=0;i<n;i++){
            if(a[i]&1){
                tmp=a[cnt];
                a[cnt]=a[i];
                a[i]=tmp;
                cnt++;
            }
        }
    }
    
    int main()
    {
        int a[]={3,4,2,5,9,8,7,6,0,1};
        int n=sizeof(a)/sizeof(a[0]);
    
        sort_1(n,a);
        for(int i=0;i<n;i++)
            cout<<a[i]<<" ";
        cout<<endl;
    
        int b[]={3,4,2,5,9,8,7,6,0,1};
        sort_2(n,b);
        for(int i=0;i<n;i++)
            cout<<b[i]<<" ";
        cout<<endl;
        return 0;
    }

    运行结果:

    两种方法的思路不一样,因此结果也不一致。

  • 相关阅读:
    学习Javascript闭包(Closure)
    JS的this原理
    页面锚点的设置
    JS异常捕获和抛出
    C++ 指针初始化要注意的地方
    Jupyter Notebook里面使用Matplotlib画图 图表中文乱码问题
    Matplotlib 基本图表的绘制
    Matplotlib 子图的创建
    Matplotlib 图表的样式参数
    Matplotlib 图表的基本参数设置
  • 原文地址:https://www.cnblogs.com/AndyJee/p/4463102.html
Copyright © 2011-2022 走看看