冒泡法排序的详细分解(一看就懂)

原创作品:如有不当,还请不吝赐教
冒泡排序:比较相邻俩个元素之间的大小,如果顺序错误,那么交换位置
(每一趟只能确定一个数的归位,也就是说第一趟确定末尾数字归位,第二趟确定倒数第二位归位,以此类推)

#include<stdio.h>
int main()
{
int n,i,t,p,j;
printf(“please input n:”);//输入数组元素的个数
scanf("%d",&n);
int a[100];
printf("\n");
printf(“please input a:”);
for(i=0;i<n;i++)//给数组元素赋值的方式为遍历数组
{
scanf("%d",&a[i]);//给元素赋值
}
for(i=0;i<n-1;i++)//
{
for(j=0;j<n-i-1;j++)//第一个元素开始开始比较,那么只需要比价n-1次(除去 本身) // 那么n-i的含义是什么呢?第二趟完成,第三趟第三个元素开始排序,由于前俩趟末尾后俩位数已经排好,所以它不需要和排过的后俩位比较,所以要-2,而-i也是这个道理
{
if(a[j]<a[j+1])
{
p=a[j];
a[j]=a[j+1];
a[j+1]=p;
}
}
}
printf(“result:”);
for(i=0;i<n;i++)
{
printf("%d ",a[i]);
}

}

在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当我们需要对一个数组进行排序时,可以使用冒泡排序算法。下面是一个详细分解过程,以帮助你更好地理解冒泡排序的实现过程。 假设我们要对以下数组进行排序: ```c int arr[] = {64, 34, 25, 12, 22, 11, 90}; ``` 第一趟排序:比较相邻的两个元素,如果前者大于后者,则交换它们的位置。 首先比较 `64` 和 `34`,发现 `64` 大于 `34`,需要交换它们的位置。交换后的数组为: ```c int arr[] = {34, 64, 25, 12, 22, 11, 90}; ``` 接着比较 `64` 和 `25`,同样需要交换它们的位置。交换后的数组为: ```c int arr[] = {34, 25, 64, 12, 22, 11, 90}; ``` 接着比较 `64` 和 `12`,需要交换它们的位置。交换后的数组为: ```c int arr[] = {34, 25, 12, 64, 22, 11, 90}; ``` 接着比较 `64` 和 `22`,需要交换它们的位置。交换后的数组为: ```c int arr[] = {34, 25, 12, 22, 64, 11, 90}; ``` 接着比较 `64` 和 `11`,需要交换它们的位置。交换后的数组为: ```c int arr[] = {34, 25, 12, 22, 11, 64, 90}; ``` 最后比较 `64` 和 `90`,不需要交换它们的位置。第一趟排序完成后,数组变为: ```c int arr[] = {34, 25, 12, 22, 11, 64, 90}; ``` 第二趟排序:再次比较相邻的两个元素,遍历到倒数第二个数,因为最后一个数已经是最大的了。 首先比较 `34` 和 `25`,需要交换它们的位置。交换后的数组为: ```c int arr[] = {25, 34, 12, 22, 11, 64, 90}; ``` 接着比较 `34` 和 `12`,需要交换它们的位置。交换后的数组为: ```c int arr[] = {25, 12, 34, 22, 11, 64, 90}; ``` 接着比较 `34` 和 `22`,需要交换它们的位置。交换后的数组为: ```c int arr[] = {25, 12, 22, 34, 11, 64, 90}; ``` 接着比较 `34` 和 `11`,需要交换它们的位置。交换后的数组为: ```c int arr[] = {25, 12, 22, 11, 34, 64, 90}; ``` 最后比较 `34` 和 `64`,不需要交换它们的位置。第二趟排序完成后,数组变为: ```c int arr[] = {25, 12, 22, 11, 34, 64, 90}; ``` 第三趟排序:再次比较相邻的两个元素,遍历到倒数第三个数。 首先比较 `25` 和 `12`,需要交换它们的位置。交换后的数组为: ```c int arr[] = {12, 25, 22, 11, 34, 64, 90}; ``` 接着比较 `25` 和 `22`,需要交换它们的位置。交换后的数组为: ```c int arr[] = {12, 22, 25, 11, 34, 64, 90}; ``` 接着比较 `25` 和 `11`,需要交换它们的位置。交换后的数组为: ```c int arr[] = {12, 22, 11, 25, 34, 64, 90}; ``` 最后比较 `25` 和 `34`,不需要交换它们的位置。第三趟排序完成后,数组变为: ```c int arr[] = {12, 22, 11, 25, 34, 64, 90}; ``` 第四趟排序:再次比较相邻的两个元素,遍历到倒数第四个数。 首先比较 `12` 和 `22`,不需要交换它们的位置。接着比较 `22` 和 `11`,需要交换它们的位置。交换后的数组为: ```c int arr[] = {12, 11, 22, 25, 34, 64, 90}; ``` 最后比较 `22` 和 `25`,不需要交换它们的位置。第四趟排序完成后,数组变为: ```c int arr[] = {12, 11, 22, 25, 34, 64, 90}; ``` 第五趟排序:再次比较相邻的两个元素,遍历到倒数第五个数。 首先比较 `12` 和 `11`,需要交换它们的位置。交换后的数组为: ```c int arr[] = {11, 12, 22, 25, 34, 64, 90}; ``` 最后比较 `12` 和 `22`,不需要交换它们的位置。第五趟排序完成后,数组变为: ```c int arr[] = {11, 12, 22, 25, 34, 64, 90}; ``` 第六趟排序:再次比较相邻的两个元素,遍历到倒数第六个数。 首先比较 `11` 和 `12`,不需要交换它们的位置。接着比较 `12` 和 `22`,不需要交换它们的位置。最后比较 `22` 和 `25`,不需要交换它们的位置。第六趟排序完成后,数组变为: ```c int arr[] = {11, 12, 22, 25, 34, 64, 90}; ``` 第七趟排序:再次比较相邻的两个元素,遍历到倒数第七个数。 首先比较 `11` 和 `12`,不需要交换它们的位置。接着比较 `12` 和 `22`,不需要交换它们的位置。接着比较 `22` 和 `25`,不需要交换它们的位置。最后比较 `25` 和 `34`,不需要交换它们的位置。第七趟排序完成后,数组变为: ```c int arr[] = {11, 12, 22, 25, 34, 64, 90}; ``` 现在,数组已经按升序排列好了。冒泡排序的时间复杂度为 $O(n^2)$,并不是最优的排序算法,但是容易理解和实现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值