首页 > 试题广场 >

写一个程序对数组进行排序,要求返回结果是奇数在前,偶数在后。

[问答题]
写一个程序对数组进行排序,要求返回结果是奇数在前,偶数在后。
奇数部分从小到大排列,偶数部分从大到小排列。
(注:不能使用本地IDE)
#include <iostream>

using namespace std;
class Sort
{
    public:
    int SortOddEven(int a[],int length);
    int swap(int &a, int &b);
    int parttion(int a[], int left,int right);
    void InsertSortLowToHigh(int a[], int left, int right);
    void InsertSortHighToLow(int a[], int left, int right);
    void Sort::printArr(int arr[], int length);
};

void Sort::printArr(int arr[], int length)
{
    for (int i = 0;i < length;i++)
    {
        cout << arr[i] << " ";
    }
    cout << endl;
}

int Sort::swap(int &a, int &b)
{
    int temp;
    temp = a;
    a = b;
    b = temp;
    return 0;
}


void Sort::InsertSortLowToHigh(int a[], int left,int right)
{
    for (int key = left;key < right;key++)
    {
        for (int i = key -1;i >= left;i--)
        {
            if (a[key] < a[i])
            {
                swap(a[key] ,a[i]);
                key = i;
            }
            else
                break;
        }
    }
    return;
}

void Sort::InsertSortHighToLow(int a[], int left, int right)
{
    for (int key = left;key < right;key++)
    {
        for (int i = key -1;i >= left;i--)
        {
            if (a[key] > a[i])
            {
                swap(a[key] ,a[i]);
                key = i;
            }
            else
                break;
        }
    }
    return;
}


int Sort::parttion(int a[], int left, int right)
{
    while (left < right)
    {
        while (left < right&&a[left] %2 != 0)  left++;
        while (right > left&&a[right] %2 == 0)  right--;
        if (left < right)
        {
            swap(a[left], a[right]);
        }

    }
    return left;
}

int    Sort::SortOddEven(int a[], int length)
{
    int key = parttion(a, 0, length - 1);
    //cout << "key=" << key << endl;
    InsertSortLowToHigh(a, 0, key-1);
    InsertSortHighToLow(a, key, length);
    return 0;
}

int main()
{
    int a[] = { 2, 5, 8, 9, 3,7,4,6,12 };
    Sort b;
    b.SortOddEven(a,9);
    b.printArr(a, 9);
    system("pause");
    return 0;
}

发表于 2020-03-03 22:55:00 回复(0)