快速问题(C ++)

时间:2012-08-03 17:50:46

标签: c++ quicksort

使用QUICKSORT,按整数排序包含偶数的整数数组和按降序排列的不均匀数字。

ex: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.


C数组包含偶数{4,6,2,8},我将使用QuickSort对C数组进行排序,如{2,4,6,8}


D数组包含uven编号{5,3,1,7},我将使用QuickSort对D数组进行排序,如{7,5,3,1} 之后我会加上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;
    }

1 个答案:

答案 0 :(得分:3)

那么,数字1到10应该排序为{2,4,6,8,10,9,7,5,3,1}

不看你的代码,我可以告诉你,你不需要两个快速排序功能。

让偶数比较少于奇数。相同奇偶校验的数字与指定的数字进行比较。