c 返回排序後的一維陣列
阿新 • • 發佈:2019-01-08
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()
函式裡面去定義陣列,然後排序,因為函式執行之後,記憶體會被釋放,然後,返回值裡面的數值就不是之前排序的結果了。