一. 问题描述⭐
把乱序的数组中的数字从小到大排序好,并打印出来。对于这个问题我们就可以使用冒泡排序。 对于数组arr[]={10,9,8,7,6,5,4,3,2,1,0}我们排序好之后变为arr[]={0,1,2,3,4,5,6,7,8,9,10}。
动态图解:⭐
二.思路分析 ⭐
首先看数字10,先和它的右边一位元素9比较,若左边的大于右边,则两个数交换位置,接着再进行第二次比较,也就是说10大于8,那么10与8进行交换位置,依次类推,因为这个数组有11个元素,所以10要处于他的正确位置要比较10次,数组变为9,8,7,6,5,4,3,2,1,0,10分别和9,8,7,6,5,4,3,2,1,0这10个数字进行比较,10这个元素经过比较后处于他的正确位置,我们称为一趟冒泡排序,那么再看元素9,要比较9次,数组变为8,7,6,5,4,3,2,1,9,10,因为有11个元素,所以跑10趟的冒泡排序就完成了排序。
- 图解
三.完整代码⭐
#define _CRT_SECURE_NO_WARNINGS //这一句必须放在第一行
#include<stdio.h>
#include<stdlib.h>
//冒泡排序
void Bubble_sort(int arr[], int sz)
{
int tmp = 0;
for (int i = 0;i < sz - 1;i++)//sz个元素要跑sz-1趟才能完成排序
{
for (int j = 0;j < sz - 1 - i;j++)//每一趟会少一个数字
{
if (arr[j] > arr[j + 1])//升序排序
{
tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;//交换相邻的两个数字
}
}
}
}
int main()
{
int n;
printf("请输入数组的个数\n");
scanf("%d", &n);
int* arr = (int*)malloc(n * sizeof(arr));
printf("需要排序的数组是\n");
for (int i = 0;i < n;i++)
{
scanf("%d", &arr[i]);
}
Bubble_sort(arr, n);
printf("升序后的数组是\n");
for (int i = 0;i < n;i++)
{
printf("%d ", arr[i]);
}
free(arr);
return 0;
}
四.运行结果⭐
创作不易, 如果这份博客👍对你有帮助,可以给博主一个免费的点赞以示鼓励。
欢迎各位帅哥美女点赞👍评论⭐收藏⭐,谢谢!!!