嗨,我编了下面的程序来输入一个数组的数组并对其进行排序。C上的快速排序错误
但我仍然得到错误的答案,如1.3333331数字!
什么问题?
#include <stdio.h>
void quicksort(double array[], long long left, long long right);
long long partition(double array[], long long left, long long right);
int fDig(double x);
int main(void) {
long long quantity = 0LL, counter = 0LL;
int dig = 0;
scanf("%lli", &quantity);
double beard[quantity];
for(counter = 0LL; counter < quantity; counter++) {
scanf("%lf", &beard[counter]);
}
quicksort(beard, 0LL, quantity - 1LL);
for(counter = 0LL; counter < quantity; counter++) {
dig = fDig(beard[counter]);
printf("%.*lf", dig, beard[counter]);
if(counter == quantity - 1LL) {
break;
}
printf(" ");
}
return 0;
}
int fDig(double x) {
int result = 0;
while(x != floor(x)) {
x *= 10;
result++;
}
return result;
}
/* Quick sort recursive function */
void quicksort(double array[], long long left, long long right){
if (left < right) {
long long middle = partition(array, left, right);
quicksort(array, left, middle - 1LL);
quicksort(array, middle + 1LL, right);
}
}
/* Partition :
Modifies the array :
SMALLER , PIVOT , GREATER
Returns the index for pivot because pivot is placed in the final position
*/
long long partition(double array[], long long left, long long right) {
long long middle;
double x = array[left];
long long l = left;
long long r = right;
while(l < r) {
while((array[l] <= x) && (l < right)) {
l++;
}
while((array[r] > x) && (r >= left)) {
r--;
}
if(l < r) {
double temp = array[l];
array[l] = array[r];
array[r] = temp;
}
}
middle = r;
double temp = array[left];
array[left] = array[middle] ;
array[middle] = temp;
return middle ;
}
我想对数组进行排序,因为数组元素是浮点数最多8位小数! (现在用我正确的算法?)
什么是输入数据? –
有什么问题? (即什么是输入和输出) –
这是排序错误,或'fDig'和输出格式?尝试对实际输入的最大位数进行硬编码,然后查看会发生什么情况。 – Useless