포인터 만 사용하여 다른 배열로 float 값 배열을 정렬해야합니다. 이 함수에서 이미 모든 값을 포인터 배열 p_data_start에 입력했습니다. 정렬 할 코드는 p_sort_start에 대한 메모리를 할당 한 후입니다. 정렬 배열과 데이터 배열의 맨 위를 가리키는 두 개의 포인터가 있습니다. inner for 루프는 p_data를 사용하여 p_data_start에서 가장 큰 번호를 찾아 p_data_pointer에 할당합니다. 내부 for 루프 다음에 p_data_pointer는 p_sort가 가리키는 위치에 값을 할당해야합니다. p_data_pointer가 가리키는 위치에 저장된 값은 0으로 설정되어 다시 확인되지 않아야합니다.포인터의 배열로 선택 정렬
여기 내 코드입니다 :
/**********************************************************************/
/* 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;
}
나는 데이터를 인쇄 할 때 번호를 입력 순서와 동일하지만, 다른 모든 것들 작동합니다. 도움말 크게 감사하겠습니다. 여기
'memcpy (p_data_start, p_sort_start, sizeof (float) * p_quantity);'BTW : ** 포인터가 아닌 ** 배열입니다. 이것은 float 배열 (포인터)입니다. 둘 다. – wildplasser