(數組)數組排序,使所有奇數在左邊,所有偶數在右邊


題目:

在一個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;
}

 

運行結果:

兩種方法的思路不一樣,因此結果也不一致。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM