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;
}