题:给一个无序数组,写一个排序函数。
数组{4,8,9,7,7,3,2,6,5}
思路:n个数组元素,这里n为九。
抽象点,九个身高不完全相同的人从左到右坐下
现在排降序,由一号位开始,把一号位上的人与其余八个人比身高,比他低者继续往后比,比他高者则与其交换座位后由现一号位上的人继续与后比较,一直比到第九人结束,那么现在,一号位上坐着的人就是最高的。然后从2号位开始重复此过程找到第二高,依此,排完8号位则全部排完。
排升序就比最低。
细想此例,N 个元素要排 N-1 趟,第一趟排 N-1次,第二趟排N-2次,第三趟排N-3次......
每趟起点 就是是 这趟的序号,第一趟 1,第二趟 2,第三趟 3......
这个函数有两层循环,外层是趟数,内层是每趟次数
码代码时,先写框架再写功能函数。
#include <stdio.h>
void bubble_sort(int arr[], int sz, int flag)
{
int i = 0;
int j = 0;
int temp = 0; //交换中间量
for (i = 0; i < sz - 1; i++) // 排 sz-1 趟
{
for (j = i; j < sz - 1; j++) // 每趟次数-1,每次起点变更为本趟序号
{
if (flag)
{
if (arr[i] > arr[j + 1]) //flag=1,升序
{
temp = arr[i];
arr[i] = arr[j + 1];
arr[j + 1] = temp;
}
}
else
{
if (arr[i] < arr[j + 1]) // flag=0,降序
{
temp = arr[i];
arr[i] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
}
int main()
{
int flag = 0; // 控制升降序,标志位, 0降,1升
int arr[] = { 4,8,9,7,7,3,2,6,5 };
int sz = sizeof(arr) / sizeof(arr[0]); // sz 就是数组元素个数
bubble_sort(arr, sz, flag); // 排序函数
// 打印此时的数组
int i = 0;
for (i = 0; i < sz; i++)
{
printf("%d ", arr[i]);
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)