【发布时间】:2017-10-31 09:14:07
【问题描述】:
我有这个冒泡排序功能:
void bubble_sort(float* array, int length)
{
int c, d;
float temp;
for (c = 0; c < (length - 1); c++) {
for (d = 0; d < length - c - 1; d++) {
if (array[d] > array[d + 1]) {
temp = array[d];
array[d] = array[d + 1];
array[d + 1] = temp;
}
}
}
}
如何更改它以便我也可以将它用于double?我希望能够一次传递一个浮点数组,另一次传递一个双精度数组,但它必须是相同的函数。像这样的:
float farr[SIZE];
double darr[SIZE];
...
bouble_sort(farr, SIZE);
bouble_sort(darr, SIZE);
编辑:我重写了排序功能,现在它似乎工作正常。你怎么看?
void bubble_sort(void* generalArray, int lenght_row, char type)
{
int column_sort;
int sorting_process = 0;
if (type == 'f')
{
float temp;
float* array = (float *) generalArray;
while (sorting_process == 0)
{
sorting_process = 1;
for (column_sort = 0; column_sort < lenght_row - 1; column_sort++)
{
if (array[column_sort] > array[column_sort + 1])
{
temp = array[column_sort + 1];
array[column_sort + 1] = array[column_sort];
array[column_sort] = temp;
sorting_process = 0;
}
}
}
}
else if (type == 'd')
{
double temp; // added
double* array = (double *) generalArray;
while (sorting_process == 0)
{
sorting_process = 1;
for (column_sort = 0; column_sort < lenght_row - 1; column_sort++)
{
if (array[column_sort] > array[column_sort + 1])
{
temp = array[column_sort + 1];
array[column_sort + 1] = array[column_sort];
array[column_sort] = temp;
sorting_process = 0;
}
}
}
}
}
【问题讨论】:
-
你打算拥有一个混合类型的集合吗?如果您只想对双精度进行排序,请更改函数签名。
-
那种;查看
qsort的文档。不过,你可能最好创建两个函数。 -
@underscore_d - 好吧,可以使用宏为不同的数据类型生成此函数,然后将其包装在通用选择中,我想。但是模板仍然更好:P
-
我必须在一个函数中完成它。你看我只是 C 编程的初学者,这是练习之一。 @Ryan 在这种情况下它只会得到浮点类型,但理论上该算法应该能够处理浮点数和双精度数。
-
点赞this