2

QUICKSORTを使用して、整数配列に含まれる偶数を昇順で並べ替え、不均一な数を降順で並べ替えます。

例:input int a [8] ={4,6,1,2,5,3,8,7}=>出力は{2,4,6,8,7,5,3,1}です。


QSort関数を使用すると、このB = {4,6,2,8,1,3,7,5}のようになり、B配列をCとDの2つの配列に分割すると思います。


C配列には偶数の{4,6,2,8}が含まれており、QuickSortを使用してこの{2,4,6,8}のようにC配列を並べ替えます。


D配列にはuven番号{5,3,1,7}が含まれており、QuickSortを使用してこの{7,5,3,1}のようにD配列を並べ替えます。その後、CとDを追加します。最後に期待される結果は次のとおりです。 {2,4,6,8,7,5,3,1}そしてこれは私のコードです:(!どうもありがとう!

    void Input(int a[], int n)
    {
        for(int i = 0; i<n;i++)
        {
            cout<<"a["<<i<<"]: ";
                cin>>a[i];
        }
    }
    void Display(int a[],int n)
    {
        for(int i = 0;i < n; i++)
        {
            cout<<a[i]<<" ";
        }
        cout<<endl;
    }
    void Swap(int &a, int &b)
    {
        int temp = a;
        a=b;
        b=temp;
    }
    void QuickSort(int a[],int Left ,int Right)
    {
        int i, j, x;
        x = a[(Left + Right)/2];
        i = Left;j = Right;
        do
        {
            while( a[i]<x) i++;
            while(a[j]>x) j--;
            if(i<=j)
            {
                Swap(a[i],a[j]);
                    i++; j--;
            }
        }while (i<=j);
        if(i<Right) QuickSort(a,i,Right);
        if(Left<j) QuickSort(a,Left,j);

    }
   //after sort the array with function QuickSort, i was suggested to use 1 more       QuickSort 
   // to move evennumber to the top of the array
    void QSort(int a[],int Left,int Right)
    {
        int i, j, x;
        x = a[(Left + Right)/2];
        i = Left;j = Right;

        {
            while(a[i]%2==0 && a[i]<x ) i++;
            while(a[j]%2==1 && a[j]>x) j--;
            if(i<=j)
            {
                Swap(a[i],a[j]);
                    i++; j--;
            }
        }while (i<=j);
        for (i = 0; i<r;i++)
        {

        }
        if(i<Right) QSort(a,i,Right);
        if(Left<j) QSort(a,Left,j);
    }


    int main()
    {
          //n is numbers of integer array
        int a[Max],n;
            cout<<"Insert numbers of array: ";
            cin>>n;
            Input(a,n);
            cout<<"Array:\n";
            Display(a,n);
            cout<<endl;

            cout<<"Array after arrange: \n";
            QuickSort(a,0,n-1);
            Display(a,n);
            cout<<endl;

            cout<<"move even number to the top:\n";
            QSort(a,0,n-1);
            Display(a,n);

        return 0;
    }
4

1 に答える 1

3

{2,4,6,8,10,9,7,5,3,1}したがって、1から10までの数字は?としてソートする必要があります。

コードを見なくても、2つのクイックソート関数は必要ないことがわかります。

偶数を奇数より少なく比較させてください。同じパリティの番号は、指定されたとおりに比較されます。

于 2012-08-03T18:14:32.740 に答える