对数组进行排序的方法有很多,我选择使用最基础的选择排序,在创建一个数组用于存放数据的时候,我们并不知道需要进行排序的数据个数有多少,如果固定数组的长度,就会使得程序变得不够方便,若我们创建一个超长的数组,虽然解决了数组长度不够的问题,但每个函数的栈区时有限的,这样创建会很浪费空间。我可以在堆中去动态申请内存,由于对的空间大,且可以根据我的数据个数来申请一个数组。
这是申请内存的简单介绍。
#include <stdio.h>
#include <stdlib.h> // 也可使用 #include <malloc.h>
int main()
{
int *list = NULL, list_len; // list指针用于指向申请到的数组, list_len 为需要申请的数组大小
printf(">>>");
scanf("%d",&list_len);
list = (int *)malloc(list_len * sizeof(int)); // 申请内存需要用到 malloc函数,第一个括号中为需要申请的数据类型,第二个括号为需要申请的内存大小
free(list); // 对于申请到内存,使用完毕后需要释放
return 0;
}
然后就可以进行排序
#include <stdio.h>
#include <stdlib.h>
int input_num(int *list,int *len_list);
int sort_list(int *list, int *len_list);
int printf_list(int *list, int *len_list);
int create_list(int *len_list, int **list);
int main()
{
int *list = NULL, len_list; // list为指向从堆中申请到的数组 , len_list 为需要进行比较的元素个数
if ( !create_list(&len_list, &list))
return 0; // 申请失败,程序结束
input_num(list, &len_list);
sort_list(list, &len_list);
printf_list(list, &len_list);
free(list); // 释放掉数组
return 1;
}
int input_num(int *list, int *len_list) // 向数组中写入数据 , len_list为数据的个数
{
int num,n;
for (n = 0; n < *len_list; n++)
{
printf("请输入第%d为整数:",n+1);
scanf("%d",list+n);
}
return 1;
}
int create_list(int *len_list, int **list) // 从堆中申请一个数组,用于存放数据
{
printf("请输入你需要输入多少为整数:"); // 获取的数组的长度
scanf("%d",len_list);
if ((*list = (int *)malloc(*len_list * sizeof(int))) == NULL) // 申请数组,并将申请到的数组的地址给指针list
{
printf("申请失败!");
return 0; // 申请失败,返回0,便于在主函数中判断
}
return 1; // 申请成功,返回1
}
int sort_list(int *list, int *len_list) // 对数组的元素进行排序
{
int i,n,temp; // temp为一个中间变量,便于方便交换值
for (i = 0; i < (*len_list) - 1; i++)
{
for (n = i+1; n < *len_list; n++)
{
if (*(list+i) > *(list+n))
{
temp = *(list+i);
*(list+i) = *(list+n);
*(list+n) = temp;
}
}
}
return 1;
}
int printf_list(int *list, int *len_list) // 输出数组中排序完成的所有值
{
int i;
for (i = 0; i < *len_list; i++)
printf("%d\n",*(list+i));
return 1;
}