01_01_冒泡排序法-入门学的第一个排序法(带函数封装)

#include<stdio.h>
#include<stdlib.h>
#include<Windows.h>

//该代码是 win10电脑下编译器IDE是 vs2017社区版如果你的电脑的ide 运行不了,请 自行检查
//一个简单的排序法
// 功能实现:定义一个整型数组,将里面的数据进行从小到大排序。
// 算法分析:首先从第一个数跟后面的数进行比较,如果你比我大,那么我们交换位置,
//假设这个数组的数据是3,1,2,9,6,8,7,5,4,0
//第一个数据是3,那么算法的开始是第一个数3跟后面的1.2...进行比较
//3大于1,那么他们两交换一下位置,数据就变成了1 3 2 9....
//3再和后面的数据比较,到2,3大于2,又互换一下。
//数据变成2 1 3...以此类推
//拿个简单的例子来说就是争夺武林盟主,你比我厉害,你上位,我退下,谁最厉害,谁就排在最后面
void maiaan()
{
int a[] = { 3,1,2,9,6,8,7,5,4,0 };//定义一个整形数组,他有一些整形的数据
printf("\n排序前\n");
int n = sizeof(a) / sizeof(a[0]);//用整个数组个数的长度,除以第一个数组元素的长度,得出元素的个数
for (int i = 0; i < n; i++)
{
printf("%4d", a[i]);
}
// 接下来将这些数据用一个算法来进行排序
for (int i = 0; i < n - 1; i++) // 每次最大元素就像气泡一样"浮"到数组的最后
{
for (int j = i; j < n; j++) // 依次比较相邻的两个元素,使较大的那个向后移
{
if (a[i] > a[j]) //如果第一个数大于第二个数,就把他们位置进行交换,相当于大的数后置
{
// 交换数据需要一个临时变量temp
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
}
// 交换后,我们可以打印数据,看看是否进行了排序,测试算法,或者代码的可靠性
printf("\n排序后\n");
for (int i = 0; i < n; i++)
{
printf("%4d", a[i]);


}


system("pause");


}
// 当一个数组作为函数形参的时候,传递给函数的参数实际上是一个指针
// 在32位的情况下,他是4个字节,在64位的情况下,他是8个字节
void 打印array(int *a,int n)
{
for (int i = 0; i < n; i++)
{
printf("%4d", a[i]);


}
}
void 排序array(int *a, int n)
{
//接下来将这些数据用一个算法来进行排序
for (int i = 0; i < n - 1; i++)// 每次最大元素就像气泡一样"浮"到数组的最后
{
for (int j = i; j < n; j++)// 依次比较相邻的两个元素,使较大的那个向后移
{
if (a[i] > a[j])//如果第一个数大于第二个数,就把他们位置进行交换,相当于大的数后置
{
//交换数据需要一个临时变量temp
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
}
}


//新建一个main函数,这次是用来实现函数的封装的功能


void main()
{
int a[] = { 3,1,2,9,6,8,7,5,4,0 };//定义一个整形数组,他有一些整形的数据


printf("\n排序前\n");
//写一个函数,调用这个函数,用来实现数组数据的输出
int n = sizeof(a) / sizeof(a[0]);//用整个数组个数的长度,除以第一个数组元素的长度,得出元素的个数
打印array(a,  n);


printf("\n排序后\n");
排序array(a, n);//排序后,再打印数据一次
打印array(a, n);
system("pause");
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值