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()
函数里面去定义数组,然后排序,因为函数执行之后,内存会被释放,然后,返回值里面的数值就不是之前排序的结果了。