开发者

C语言中的冒泡排序问题

开发者 https://www.devze.com 2022-12-27 11:03 出处:网络 作者: 我的博尔赫斯
目录冒泡排序的原理冒泡排序的步骤冒泡排序代码冒编程泡排序两种不同循环方法原理总结冒泡排序的原理
目录
  • 冒泡排序的原理
  • 冒泡排序的步骤
  • 冒泡排序代码
  • 冒编程泡排序两种不同循环方法
    • 原理
  • 总结

    冒泡排序的原理

    C语言中的冒泡排序问题

    冒泡排序的步骤

    假设我们现在有一个无序数组 arr[] = { 2,9,1,3,7,6 }; 我们要用冒泡排序法让其变得有序,到底该怎么做呢?我们先来看一下思路

    C语言中的冒泡排序问题

     在这一次(注意!是一次!)冒泡排序中,我们让这个无序数组中最大的数9排到了最后,以此类推,我们总共需要进行多少次这样的排序呢?对的,答案是5次。

    好的,那android么这是我们对冒泡排序外部的分析,那么一次冒泡排序在数组里面要进行多少次比较呢?

    让我们想一想,第一次我们冒泡排序将最大编程客栈的数9排到了最后,那么第二次还需要对9进行比较吗?

    所以数组内部元素排序的比较是会随着外部冒泡排序次数而改变的。所以我们应该创建两个变量,一个用来控制外部排序次数,一个用来控制内部比较次数。接下来就上代码吧

    冒泡排序代码

    C语言中的冒泡排序问题

    C语言中的冒泡排序问题

    在这里要注意的是对于i和j的限制条件,要清楚i和j分别代表啥,并且弄清楚排序次数和比较次数就没有问题了呀

    冒泡排序两种不同循环方法

    在数据结构与算法这门课程中,排序算法至关重要。

    冒泡排序就是其中之一,其代码我们必须烂熟于心。

    原理

    从表头向表尾循环,

    比较相邻的两个元素大小,若前元素大于后元素,则交换两者位置。

    然后继续向下比较

    如下表

    大的数字会慢慢置入表尾,犹如冒泡一般,大泡更快速度向水面靠近,故称之为冒泡排序

    C语言中的冒泡排序问题

    上图所示

    当冒泡到第四趟以后就没必要往下面继续循环

    不然会增加复杂度

    我们可以增加一个标志flag

    每趟冒泡之前会将flag初始化为0

    假如冒泡的过程中有元素的交换,就将flag赋值为1;

    在每趟冒泡之后会有检验flag是否为0

    如果为0,代表没有元素交换,break;

    //第一种循环方法
    void BubbleSort(ElementType A[],int N){    
     
    for(int p=N-1;p>0;p--){
            int flag=0;    
            for(int i=1;i<=p;i++){
                if(A[i-1]>A[i]){    //如果前面元素大于后面元素就交换 
                   int temp=A[i-1];    //swap(A[i-1],A[i]);
                    A[i-1]=A[i];
                js    A[i]=temp;
                    flag=1;
                }
            }
            if(flag==0){        //一轮冒泡后并没有发生交换则说明数组已经有序
                break;          //这样做可以减少循环次数
            }
        }
    }
    //第二种循环方法
    void BubbleSort(ElementType A[],int 开发者_Python入门N){
        
        for(int i=0;i<N;i++){
            int flag=0;
            for(int j=0;j<N-i-1;j++){
                if(A[i-1]>Apython[i]){    //如果前面元素大于后面元素就交换
                    int temp=A[i-1];    //swap(A[i-1],A[i]);
                    A[i-1]=A[i];
                    A[i]=temp;
                    flag=1;
                }
            }
            if(flag==0){
                break;
            }
        }
    }

    总结

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

    0

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    关注公众号