使用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;
}
答案 0 :(得分:3)
那么,数字1到10应该排序为{2,4,6,8,10,9,7,5,3,1}
?
不看你的代码,我可以告诉你,你不需要两个快速排序功能。
让偶数比较少于奇数。相同奇偶校验的数字与指定的数字进行比较。