2013-10-10 83 views
1

我需要僅使用指針將float數組的數組排序到另一個數組中。在這個函數中,我已經將所有的值輸入到指針數組p_data_start中。排序的代碼是在爲p_sort_start分配內存之後,我有兩個指針指向排序數組和數據數組的頂部。 inner for循環使用p_data來查找p_data_start中的最大數字,並將其分配給p_data_pointer。在內循環之後,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; 
} 

當我打印出來的數據,這個數字都在爲進入相同的順序,但一切工作。幫助將不勝感激。

+2

'memcpy(p_data_start,p_sort_start,sizeof(float)* p_quantity);'順便說一句:它不是**指針數組。它是一個(指向)一組浮點數的指針。兩個都。 – 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

@time我只是把它輸入了一切。它的工作!謝謝。 –