2013-10-10 4 views
1

포인터 만 사용하여 다른 배열로 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; 
} 

나는 데이터를 인쇄 할 때 번호를 입력 순서와 동일하지만, 다른 모든 것들 작동합니다. 도움말 크게 감사하겠습니다. 여기

+2

'memcpy (p_data_start, p_sort_start, sizeof (float) * p_quantity);'BTW : ** 포인터가 아닌 ** 배열입니다. 이것은 float 배열 (포인터)입니다. 둘 다. – wildplasser

답변

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으로 최대 값의 새로운 주소을 저장할.

+0

@timeau 방금 입력했습니다. 그리고 효과가있었습니다! 감사. –