我想对整数类型的有理数数组进行排序。我使用了冒泡排序算法。我将分子与分母相除,然后根据它们的浮点商值比较两个有理数。但是,我没有得到正确的结果。
排序代码:
void sort(rational arr[], int n) {
int i, j;
for (i = 0; i < n-1; i++)
for (j = 0; j < n-i-1; j++)
if (arr[j] > arr[j+1])
swap(arr[j], arr[j+1]);
}
交换代码:
void swap(rational &r1, rational &r2) {
rational temp;
temp.set(r1.getNum(),r1.getDenom());
r1.set(r2.getNum(),r2.getDenom());
r2.set(temp.getNum(),temp.getDenom());
}
比较代码:
int operator>(const rational&r2) const {
float n1 = (float)this->num/(float)this->denom;
float n2 = (float)r2.num/(float)r2.denom;
if(n1>n2) return 1;
if(n1==n2) return 0;
if(n1<n2) return -1;
}
主要的
int main(int argc, char** argv) {
rational *arr;
int n = 10;
cout<<"\You may enter upto 10 relational numbers. How many?"<<endl;
cin>> n;
arr = new rational[n];
fillArray(arr,n);
cout<<"\nBefore sorting Array contains: "<<endl;
displayArray(arr,n);
cout<<"\nAfter sorting Array contains: "<<endl;
sort(arr,n);
displayArray(arr,n);
return 0;
}
预期输出:
它可以按升序或降序排列。
提前致谢。