当前位置:网站首页>冒泡排序(详细)
冒泡排序(详细)
2022-07-27 04:23:00 【GD_small_bit】
大家好,我还是那个爱分享编程知识的博主,同时我也会分享一些有趣的C语言小程序的代码,让你们在编程学习的过程中体验到快乐,并且我致力于在文章中体现编程思想,关注点一点,下期更精彩。
我今天将为大家带来冒泡排序。我们将冒泡排序与前面的文章查询数组的方法相结合,就可以解决了前面数组查询的代码只是适用有序数组的缺点,话不多讲,开始进入正题。
我们先写主函数和创建数组,为后面做准备,如下:
#include<stdio.h>
int main ()
{
int arr[]={
8,4,5,2,3,6,7,1,10,9};
return 0;
}
接下来,我们介绍冒泡排序的思想。在这里,假设我们要把数组排成升序。我们将arr数组的第一个元素和第二个元素进行比较,如果第一个元素大于第二个元素,那我们就交换它们两个的位置,并且继续比较下去,如果,第一个元素小于第二个元素,我们就将第二个元素和第三个元素进行比较,以此类推下去。如下:
第一个元素大于第二个元素,满足了前面提到的第一种类型,所以我们将8和4交换一下位置。如下:
我们交换了8和4的位置,接下来我们继续拿8比较下去。如下:
依然满足前面的第一种类型,将8和5进行交换,并且拿8比较下去。如下:
依此类推,直到我们把8比较到了10的前面,这次终于满足了第二种类型,所以我们留下了8,不再移动该元素。如下:
在第二种类型中,我们还要把元素8的下一个元素,也就是10,拿出来,继续比较下去。如下:
由图可知,我们依然要交换这两个元素的位置。如下:
直到现在,我们就把我们的第一趟冒泡排序完成了,由图可知,我们将最大的元素送到了最后面,接下来,我们就要继续来到第一个元素,并且重复上面的步骤,直到我们把里面第二大的元素排到倒数第二个的位置,并且重复,直到数组全部元素排序的完成。
以上就是冒泡排序的思想了,接下来,我们将要完成冒泡排序的代码实现。
由上面冒泡排序思想可得,我们要经过多次比较和交换来实现我们的一趟冒泡排序,所以在这里我们需要引入循环来实现,这个循环先叫做循环1吧。在实现一趟冒泡排序后,我们继续来到第一个元素开始我们的第二趟冒泡排序,也就是再次进行循环1,并且重复这个动作到冒泡排序的完成,所以,我们依然选择引入循环,这个循环先叫做循环2,并且循环1嵌套在循环2中,保证循环2每循环一次都能调用循环1。
接下来,便是考虑循环的限制条件了,先考虑循环2,设想一下,如果我们想要把10个元素从小到大排,我们需要排多少次?10次?答案应该是九次,原因就是当我们排第九个元素的时候,是不是已经把我们第十个元素也间接排好,所以我们的*循环2**的限制条件便是数组的元素个数减一。
接下来就是循环1的限制条件,由上面的冒泡思想可以得知,我们进行第一趟冒泡排序时,便把最大的元素送到了最后面,也就是满足了我们排序的要求,那么在下次进行冒泡排序的过程中,我们就不用继续比较这个元素。
由上可知,在每进行一趟冒泡排序后,我们下一趟的冒泡排序的所要比较的元素就减一,而冒泡排序次数不就是循环2调用循环1来实现一趟冒泡排序的次数嘛,也就是循环2的当前循环次数么。所以我们的循环1的限制条件就是元素个数减1(原本需要排序的次数),再减去循环2的循环次数。
下面是完整代码:
#include<stdio.h>
int main ()
{
int arr[]={
8,4,5,2,3,6,7,1,10,9};
//计算数组元素个数
int sz = sizeof(arr)/sizeof(arr[0]);
int i = 0;
int j = 0;
//循环2,限制条件便是数组元素数量减一
//由于i从0开始,而不是从1开始,所以限制条件不用加等号
for(i=0;i<sz-1;i++)
{
//循环1,限制条件是数组元素数量减一,再减循环2的循环次数
for(j=0;j<sz-1-i;j++)
{
//如果if语句不成立,进行下次循环,
//也就是拿下个元素继续往下比较
if(arr[j]>arr[j+1])
{
//交换
int tmp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = tmp;
}
}
}
//打印一下数组,查看冒泡排序的成果
for(i=0;i<sz-1;i++)
{
printf("%d ",arr[i]);
}
return 0;
}
以上就是冒泡排序的思想和代码了,如果喜欢,不要忘记点赞加关注,下期更精彩。
边栏推荐
- 结构型模式-桥接模式
- Cloudcompare & PCL matching point median (or standard deviation) distance suppression
- 结构型模式-外观(Facade)模式
- Influxdb basic understanding
- JS第二天(变量、变量的使用、命名规则、语法扩展)
- Use unity to build a WordArt system
- GenericServlet为什么有两个init方法
- Shell的正则表达式入门、常规匹配、特殊字符:^、$、.、*、字符区间(中括号):[ ]、特殊字符:\、匹配手机号
- The difference between ArrayList and LinkedList
- The project parameters are made into configurable items, and the @configurationproperties annotation is used
猜你喜欢

匿名命名管道, 共享内存的进程间通信理解与使用

Word/excel has a fixed table size. When filling in the content, the table does not change with the cell content

Dino paper accuracy, and analyze the variant of its model structure & Detr

Final review of management information system

Yolov4 network details

From scratch, C language intensive Lecture 4: array

Technology sharing | gtid that needs to be configured carefully_ mode

F - Pre-order and In-order(Atcoder 255)
![[final review of software engineering] knowledge points + detailed explanation of major problems (E-R diagram, data flow diagram, N-S box diagram, state diagram, activity diagram, use case diagram...)](/img/f4/70634556c4ae8fc3b087084e1e27b3.png)
[final review of software engineering] knowledge points + detailed explanation of major problems (E-R diagram, data flow diagram, N-S box diagram, state diagram, activity diagram, use case diagram...)
![[C language] recursively explain the tower of Hanoi problem](/img/a6/bbf1f19fc2a663df155cca53f2538a.png)
[C language] recursively explain the tower of Hanoi problem
随机推荐
Some common instructions in JVM tuning
Maximum value, minimum value, bubble sort in the array
Standard C language 13
结构型模式-桥接模式
HEAD detached from origin/...导致push失败
好用的shell快捷键
Shel automatically sets directory permissions
【动态规划百题强化计划】11~20(持续更新中)
What is the difference between using varchar type and using date type for timestamp column?
The project parameters are made into configurable items, and the @configurationproperties annotation is used
JS modify the key value of the object array
els 兼容性DC、传递图片到窗口
使用Unity做一个艺术字系统
P1438 无聊的数列 线段树+差分
Introduction to regular expressions of shell, general matching, special characters: ^, $,., * Character range (brackets): [], special characters: \, matching mobile phone number
P1438 boring sequence line segment tree + difference
第六章:云数据库
2022-07-26: what is the output of the following go language code? A:5; B:hello; C: Compilation error; D: Running error. package main import ( “fmt“ ) type integer in
QString转换char*
5. Display of component dynamic components