使用指针数组进行选择排序

时间:2013-10-10 23:57:41

标签: c sorting pointers

我需要仅使用指针将浮点值数组排序到另一个数组中。在这个函数中,我已经将所有值都输入到指针数组p_data_start中。要排序的代码是在为p_sort_start分配内存之后,我有两个指针指向排序数组和数据数组的顶部。内部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;
}

当我打印出数据时,数字与输入的顺序相同,但其他一切都有效。非常感谢帮助。

1 个答案:

答案 0 :(得分:0)

下面:

if (*p_data > *p_data_pointer)
{
    *p_data_pointer = *p_data;
}

你想要的确是

if (*p_data > *p_data_pointer)
{
    p_data_pointer = p_data;
}

您只想将最大值的新地址存储到p_data_pointer,而不是替换它指向的值。