对输入的n个数进行排序
一.源代码
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
void bubble_sort(int arr[], int n)
{
int i = 0;
int j = 0;
for (i = 0; i < n-1; i++)
{
for (j = 0; j < n-1-i; j++)
{
int temp = 0;
if (arr[j] > arr[j + 1])
{
temp = arr[j];
arr[j] = arr[j + 1];
arr[j+1] = temp;
}
}
}
}
void Print(int arr[], int n)
{
int i = 0;
for (i = 0; i < n; i++)
{
printf("%d ", arr[i]);
}
}
int main()
{
int n = 0;
printf("升序排序,请输入要比较的数的个数:");
scanf("%d", &n);
int *arr = (int*)malloc(sizeof(int)*n);
if (arr == NULL)
{
perror("malloc");
return 1;
}
printf("\n请输入要排序的数字:");
int i = 0;
int count = 1;
for (i = 0; i < n; i++)
{
scanf("%d", &arr[i]);
count++;
}
if (count == n)
{
bubble_sort(arr, n);
printf("\n已完成升序排序:");
Print(arr, n);
}
else
{
printf("\n输入的数字个数错误");
}
return 0;
}
二.代码讲解
- 开辟一个动态内存空间,以便灵活的对输入的n个数进行排序;
int n = 0;
printf("升序排序,请输入要比较的数的个数:");
scanf("%d", &n);
int *arr = (int*)malloc(sizeof(int)*n);//动态开辟
- 判断是否成功开辟空间,如果开辟失败,数组指针返回空指针,并打印开辟失败原因
if (arr == NULL)
{
perror("malloc");
return 1;
}
printf("\n请输入要排序的数字:");
- 这时候,我们就可以输入要排序的数字,并且定义一个计数变量,用于判断输入的数字的个数,与n的值是否相同
//输入n个整数
int i = 0;
int count = 1;
for (i = 0; i < n; i++)
{
scanf("%d", &arr[i]);//注意是&arr[i]
count++;
}
- 如果count != n,则不会调用排序函数,并打印提示
if (count == n)
{
//冒泡函数的调用
bubble_sort(arr, n);
//调用函数,打印排序好的数组
printf("\n已完成升序排序:");
Print(arr, n);
}
else
{
printf("\n输入的数字个数错误");
}
- 我们这个主函数里,是没有函数声明的,所以我们要在主函数前,对冒泡排序函数、打印函数提前进行定义。
冒泡排序函数
//刚入坑的uu们要特别关注一下传递的参数 int arr[]
//因为如果只是 int arr,只能表示一个 int 类型
void bubble_sort(int arr[], int n)
{
int i = 0;
int j = 0;
for (i = 0; i < n-1; i++)//n-1是因为不用与自己比较,所以比的数就少一个
{
for (j = 0; j < n-1-i; j++)
//n-1-i,因为,每进行一趟比较,就会少对一个数比较
{
int temp = 0;
if (arr[j] > arr[j + 1])
//升序排法,前一个数和后一个数比较,如果前数大则与后一个数换位置
{
temp = arr[j];
arr[j] = arr[j + 1];
arr[j+1] = temp;
}
}
}
}
因为这个函数的功能只是对乱序的数进行排序,所以函数不需要返回值,如果有uu不太了解冒泡排序的原理,可以看看大佬的这篇博客
C语言——冒泡排序
打印函数的调用
//打印函数的参数和排序函数相同
void Print(int arr[], int n)
{
int i = 0;
for (i = 0; i < n; i++)
{
printf("%d ", arr[i]);
}
}
好了,以上是运用冒泡函数,对输入的n个数进行排序,希望对刚刚入坑的uu们有帮助!