ポインターのみを使用して、浮動小数点値の配列を別の配列に並べ替える必要があります。この関数では、既にすべての値をポインター配列 p_data_start に入力しています。ソートするコードは、p_sort_start にメモリを割り当てた後です。ソート配列とデータ配列の先頭を指す 2 つのポインターがあります。内側の for ループは、p_data を使用して p_data_start の最大数を見つけ、それを p_data_pointer に割り当てます。内側の for ループの後、p_data_pointer はその値を p_sort が指す場所に割り当てる必要があります。p_data_pointer が指している場所に格納されている値は、再度チェックされないようにゼロにする必要があります。
これが私のコードです:
/**********************************************************************/
/* Sort values of experimental scientific data into descending order */
/**********************************************************************/
float sort_data(int p_quantity, float *p_data_start)
{
float *p_data, /* Pointer that moves down the data array */
*p_sort, /* Pointer that moves down the sort array */
*p_sort_start, /* Sorted array */
*p_data_pointer; /* Points to the largest number */
/* Allocate memory for the sorted experimental scientific data */
if((p_sort_start = (float*)malloc(sizeof(float) * p_quantity)) == NULL)
{
printf("\nCould not allocate memory for sorted array");
printf("\nERROR NUMBER %d OCCURED", SORTING_ERROR);
printf("\nThe program is aborting.");
exit(SORTING_ERROR);
}
/* Sort the data into descending order */
for(p_sort = p_sort_start; (p_sort-p_sort_start) < p_quantity;
p_sort++)
{
p_data_pointer = p_data;
for(p_data = p_data_start; (p_data-p_data_start) < p_quantity;
p_data++)
{
if (*p_data > *p_data_pointer)
{
*p_data_pointer = *p_data;
}
}
*p_sort = *p_data_pointer;
*p_data_pointer = 0;
}
/* Copy the sorted data values back into the original array */
memcpy(p_sort_start, p_data_start, sizeof(float) * p_quantity);
/* Free memory from the sorted array */
free(p_sort_start);
return 0;
}
データを印刷すると、番号は入力した順序と同じですが、それ以外はすべて機能します。助けていただければ幸いです。