在C函数中对数组进行排序

所以我需要将数组传递给函数sort并对它进行排序,它在外面工作,但不能让它在函数内部工作。 需要传递的指针只是不确定如何。

#include  void sort(int *number, int n) { /* Sort the given array number, of length n */ int temp = 0, j, i; for (i = 1; i < n; i++) { for (j = 0; j  number[j + 1]) { temp = number[j]; number[j] = number[j + 1]; number[j + 1] = temp; } } } } int main() { int n = 20; int *ptr = malloc(n * sizeof *ptr); int i = 0; while (i < n) { ptr[i] = rand() % 100; i++; } int j = 0; while (j < n) { printf("%d , ", ptr[j]); j++; } void sort(ptr, n); printf("\n"); int x = 0; while (x < n) { printf("%d , ", ptr[x]); x++; } } 

void sort(ptr, n); 应该只是sort(ptr, n);

我可能错了,但我相信在C编译器中,第一种forms被解释为函数原型,第二种forms被解释为实际的函数调用。

首先,当我编译时,我得到两个编译器警告。 永远不要忽略编译器警告。 实际上,在这种情况下,编译器警告之一恰好发生在代码中被破坏的行上。 一般用-Wall编译。

接下来,在调试器中运行它。 例如,使用-g编译并使用gdb 。 你可以谷歌一个备忘单,了解如何轻松地开始使用gdb。 在程序中逐行观察正在发生的事情,您将知道错误是什么。 在这种特殊情况下,您会发现跳过调用函数的行。 这条线已经被警告报告,所以如果它的function出乎意料的话应该不足为奇。

这段代码使用指针对数组进行排序。 希望能帮助到你

 //@author Abdul-Razak Adam #include  #include  void fillArray(int * array, int size); void printArrayValue(int * array, int size); int getIndexOfMin(int * array, int size); void removeAnIndexFromArray(int* array, int size, int index); int* sortArray(int* array, int size); //test int main (void){ int* SIZE; //size int * array; SIZE = (int*) malloc(sizeof(int)); scanf("%d", SIZE); //printf("%i\n", *SIZE); int size = *SIZE; array = (int*) malloc (size * sizeof(int)); fillArray(array,size); printArrayValue(array,size); printf("..............................................\n"); printf("Array Sorted\n"); printf("..............................................\n"); array = sortArray(array,size); //get pointer to sorted array printArrayValue(array,*SIZE); //free memory free(array); free(SIZE); } //fill array with random values void fillArray(int* array, int size){ int i = 0; for (i = 0; i < size; i++){ *(array + i) = rand()%100; } } //print value from array void printArrayValue(int* array, int size){ int i = 0; for (i = 0; i < size; i++){ printf("%i , ", *(array+i)); } printf("\n"); } //sort value of array int* sortArray(int* array, int size){ int min = *array; int originalSize = size; int * temp; temp = (int* )malloc(sizeof(int) * size); int i = 0; int index; while(size > 0){ index = getIndexOfMin(array,size); temp[i++] = array[index]; removeAnIndexFromArray(array, size --,index); } return temp; } //get the index of the minimum value in the array int getIndexOfMin(int * array, int size){ int min = *array; int i = 0 ; int index = 0; for (i = 0 ; i < size; i++){ if (min > *(array+i)){ min = *(array+i); index = i; } } return index; } //remove the minimum value from the array void removeAnIndexFromArray(int* array, int size, int index){ *(array + index) = 0; if (index != (size-1)){ int i = index; for (i = index; i < (size -1); i++){ *(array + i) = *(array + (i+1)); } } }