2016-02-23 48 views
0

這是我的一個函數,將排序傳過來的指針數組代碼:這個C排序函數有什麼問題?

#include <stdlib.h> 
#include <stdio.h> 

void sortArray(int * numbers, unsigned int n, unsigned int descendFlag); 

int main(int argc, char ** argv) { 

    int numArray[4] = {14, 4, 16, 12};  
    int * arrayPtr = numArray; 

    int x; 
    for (x = 0; x < 4; x++) { 
     printf("%i\n", numArray[x]); 
    } 

    printf("\n\n\n");   

    sortArray(arrayPtr, 4, 1); 

    for (x = 0; x < 4; x++) { 
     printf("%i\n\n", numArray[x]); 
    } 

    printf("\n\n\n"); 

    sortArray(arrayPtr, 4, 0); 

    for (x = 0; x < 4; x++) { 
     printf("%i\n\n", numArray[x]); 
    }  
    return 0; 
} 

void sortArray(int * numbers, unsigned int n, unsigned int descendFlag) { 
    int i, j; 
    for (i = 0; i < n; i++) { 
     for (j = i + 1; j < n; j++) { 
      // Ascending 
      if (descendFlag != 1 && numbers[i] > numbers[j]) { 
       int temp = numbers[i]; 
       numbers[i + 1] = numbers[i]; 
       numbers[i] = temp; 
      } 

      if (descendFlag == 1 && numbers[i] < numbers[j]) { 
       int temp = numbers[i]; 
       numbers[i + 1] = numbers[i]; 
       numbers[i] = temp; 
      } 
     } 
    } 
} 

這裏是出把這個程序:

14 
4 
16 
12 



14 

14 

14 

12 




14 

14 

14 

14 

什麼錯嗎?我也正確使用指針?

我是C的新生,指針太混亂了。我不知道我是否應該使用&*來訪問作爲指針傳遞的變量。我做錯了什麼?

回答

3

ij這裏

之間
if (descendFlag == 1 && numbers[i] < numbers[j]) 

,後來與ii + 1交換比較..

int temp = numbers[i]; 
numbers[i + 1] = numbers[i]; 
numbers[i] = temp; 

交換,你比較

位置的元素
int temp = numbers[i]; 
numbers[i] = numbers[j]; 
numbers[j] = temp; 

規則同樣適用於其他比較和交換(descendFlag != 1


你不需要這個變量

int * arrayPtr = numArray; 

numArray可以直接使用這樣

sortArray(numArray, 4, 0); 

由於數組的名稱是該數組的基地址。