1. 程式人生 > >c 返回排序後的一維陣列

c 返回排序後的一維陣列

c 中給陣列排序,其實很容易實現,和Java中是類似的。但是C中麻煩的是,如何傳遞陣列引數,如何返回陣列。

但是,c中陣列,完全可以使用指標表示。於是,利用指標來傳遞陣列及返回陣列。

#include <stdio.h>
#include <stdlib.h>
// 書寫函式 給陣列排序,並返回排序後的陣列
int* sort(int nums[6],int len);
int* sort2(int *nums,int len);
int main()
{
    int array[6] = {11,23,13,4,53,6};

    printf("原陣列顯示:"
); for(int i=0;i<6;i++){ printf(" %d ",*(array+i)); } int *so = sort2(array,6); printf("\nso= %p \n",so); printf("排序結果顯示:"); for(int i=0;i<6;i++){ printf(" %d ",*(so+i)); } return 0; } int* sort2(int *nums,int len){ printf("\nnums= %p \n",nums); int
i,j; int temp; for(int i=0;i<len;i++){ for(int j=0;j<len-i-1;j++){ if( *(nums+j)<*(nums+j+1)){ temp = *(nums+j); *(nums+j) = *(nums+j+1); *(nums+j+1) = temp; } } } // for(int i=0;i<len;i++){
// printf("-+- %d ",*(nums+i)); // } return nums; } int* sort(int nums[6],int len){ printf("nums= %p \n",nums); int i,j; int temp; for(int i=0;i<len;i++){ for(int j=0;j<len-i-1;j++){ if( *(nums+j)<*(nums+j+1)){ temp = *(nums+j); *(nums+j) = *(nums+j+1); *(nums+j+1) = temp; } } } // for(int i=0;i<len;i++){ // printf("-- %d ",*(nums+i)); // } return nums; } /* console log: 原陣列顯示: 11 23 13 4 53 6 nums= 0029feec so= 0029feec 排序結果顯示: 53 23 13 11 6 4 */

注意:這裡傳遞進來是一個數值的指標,也就是陣列第一個元素的地址。然後返回的依然是第一個元素的地址。
因為陣列是存在在一片連續的記憶體空間中的,於是,拿到首地址,拿到陣列長度,就可以得到陣列的全部元素了。

另外,特別注意,千萬不要在sort()函式裡面去定義陣列,然後排序,因為函式執行之後,記憶體會被釋放,然後,返回值裡面的數值就不是之前排序的結果了。