冒泡排序详解

1、什么冒泡排序

冒泡排序是一种简单的排序算法,它重复地比较相邻的两个元素,如果它们的顺序不正确就交换它们,直到没有需要交换的元素为止。这样,每一轮比较都会将最大(或最小)的元素"冒泡"到最后的位置。

2、冒泡排序的原理

通过比较相邻元素的大小来进行排序,每一轮比较都会将当前未排序部分的最大(或最小)元素放到正确的位置。经过多轮比较和交换,最终整个数组会被排序。

即假设要将已知无需数列按从小到大排列,将第一个元素与后面的元素依次比较,如果比后面的元素小,就与后面某个元素交换位置,然后用这个元素再依次往后比较,遇到比这个元素小的就与这个元素交换,直到最后一个元素,就完成了一趟冒泡排序,则最后一个元素一定是这个序列里最大的一个元素;然后开始第二趟冒泡排序,继续从第一个元素开始往后一次比较,遇到较小的就交换位置,直到倒数第二个数,那么最后倒数第二个数就变成了第二大的数.......依次排完序列中所有的数,那么这个数的顺序就会变成从小到大。

冒泡排序的时间复杂度为O(n^2),不适合对大规模数据进行排序,但是由于其简单易实现的特点,适合用于小规模数据的排序。

3、实现过程

用冒泡排序法对任意输入的 10 个数按照从小到大的顺序进行排序。

代码如下:

复制代码
#include <stdio.h>
int main() {
    int arr[10];
    int i=0,j=0,t=0;
    
    printf("请输入10个数:\n ");
    for (int i = 0; i < 10; i++) 
        scanf("%d", &arr[i]);	 		//从键盘中输入10个数
    
        for ( i = 0; i < 10-1; i++) 	//变量i代表比较的趟数
        for ( j = 0; j < 10-i-1; j++) 	//变最j代表每趟两两比较的次数
            if (arr[j] > arr[j+1]) 
				{
                t = arr[j];				 //产利用中间变童实现两值互换
                arr[j] = arr[j+1];
                arr[j+1] = t;
				}
    
    printf("排序后的顺序是:\n ");
    for (int i = 0; i < 10; i++) 
    	printf("%d ", arr[i]);
    printf("\n");
    return 0;
}

运行结果:

复制代码
请输入10个数:
 61 33 21 45 25 5 14 67 49 39
排序后的顺序是:
 5 14 21 25 33 39 45 49 61 67
请按任意键继续. . .
相关推荐
码农的神经元11 分钟前
拆解 SDGT 算法:图神经网络 + Transformer 如何做短期电力负荷预测
神经网络·算法·transformer
Irissgwe19 分钟前
算法之滑动窗口
数据结构·算法
纽扣66728 分钟前
【算法进阶之路】链表核心:快慢指针与反转链表专题精讲
数据结构·c++·算法·链表
浅念-40 分钟前
吃透栈:LeetCode 栈算法题全解析
数据结构·c++·算法·leetcode·职场和发展·
吟安安安安40 分钟前
【算法设计与分析】第一讲 算法基础(上)
算法
阿Y加油吧40 分钟前
二刷 LeetCode:62. 不同路径 & 64. 最小路径和 复盘笔记
笔记·算法·leetcode
生成论实验室1 小时前
《源·觉·知·行·事·物:生成论视域下的统一认知语法》导论:在破碎的世界寻找统一语法
人工智能·科技·算法·架构·创业创新
承渊政道1 小时前
【动态规划算法】(两个数组的DP问题深度剖析与求解方法)
数据结构·c++·学习·算法·leetcode·动态规划·哈希算法
杨连江1 小时前
原子级平面限域协同晶核诱导定向生长单层鳞片石墨的研究
算法
MATLAB代码顾问1 小时前
混合粒子群-模拟退火算法(HPSO-SA)求解作业车间调度问题——附MATLAB代码
算法·matlab·模拟退火算法