冒泡排序

简介: 讲解冒泡排序

一、冒泡排序

  • 原理
    它从头到尾每次都对相邻的两个数进行比较,将较大(或较小)的数交换到后一个元素中,每一轮的比较都在没有排好的数据中,找出最大数(或最小数)放在这些数的后面。
通俗的说就是当我们上体育课的时候会排身高,那么就要最高的站到最后面,老师就要先从一号开始看,用一号跟二号比较,如果一号更高,那么他们俩换位置,一号站第二排,二号站第一排,如果不然,则不换。接着比较二排的和三号的身高,如果三号更高,重复上面的操作,直到比较到最后一个人。
假设10个人排队int a[10];

比较第一轮:

for(int j=0;j<9;j++){

        if(a[j]>a[j+1]){

                t=a[j];

                a[j]=a[j+1];

                a[j+1]=t;

}

}//需要比较9次

比较第二轮

for(int j=0;j<8;j++){

        if(a[j]>a[j+1]){

                t=a[j];

                a[j]=a[j+1];

                a[j+1]=t;

}//需要比较8次(不在比较上一轮已经排好的)
上面说的只是把最高的排到了最后一排,还有第二高,第三高的呀,所以此时有需要一个for循环保证高的人都在他们应该在的位置,那么第二次排的时候,我们还需要管那个最高的人吗?当然不用啊,他都已经排好了,不用再动他了所以控制比较的循环变量是小于控制人数的循环变量的。
直接用两个for循环
for(int i=0;i<9;i++){

        for(int j=0;j<9-i;j++){

                if(a[j]>a[j+1]){

                        t=a[j];

                        a[j]=a[j+1];

                        a[j+1]=t;

               }

        }

}

2.举例

题目

输入10个数对其进行排序
代码
#include "stdio.h"
 
int main() {
    int t, a[10];
 
    for (int i = 0; i < 10; i++) {
        scanf("%d", &a[i]);
    }
 
    for (int i = 0; i < 9; i++) {
 
        for (int j = 0; j < 9 - i; j++) {
 
            if (a[j] > a[j + 1]) {
 
                t = a[j];
 
                a[j] = a[j + 1];
 
                a[j + 1] = t;
 
            }
 
        }
 
    }
 
    for (int i = 0; i < 10; i++) {
        printf("%d\t", a[i]);
    }
 
    return 0;
}

执行结果
image.png

相关文章
|
5月前
|
搜索推荐 C++
C++冒泡排序的实现
C++冒泡排序的实现
|
5月前
|
搜索推荐
什么是冒泡排序
什么是冒泡排序
|
算法 C语言
|
算法 搜索推荐 JavaScript
|
机器学习/深度学习 算法 搜索推荐
【c++】冒泡排序
【c++】冒泡排序
87 0
|
算法 搜索推荐 C语言
冒泡排序就这么简单
在我大一的时候自学c语言和数据结构,我当时就接触到了冒泡排序(当时使用的是C语言编写的)。现在大三了,想要在暑假找到一份实习的工作,又要回顾一下数据结构与算法的知识点了。
153 0
冒泡排序就这么简单