zoukankan      html  css  js  c++  java
  • 冒泡排序法(C语言)

    冒泡排序(Bubble Sort)
    一种计算机科学领域的较简单的排序算法。它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首字母从从Z到A)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。
    这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。

    基本思路

    每次将相邻的两个数比较,将较小(或较大)的调到前面。重复这个步骤,最终将最大(或最小)的数排在最后。

    算法描述

    1.比较相邻两个数据,如果第一个比第二个大,就交换两个数
    2.对每一个相邻的数做同样1的工作,这样从开始一队到结尾一队在最后的数就是最大的数。
    3.针对所有元素上面的操作,除了最后一个。
    4.重复1~3步骤,知道顺序完成。

    算法实现

    (这里以从小到大排序为例)

    # include<stdio.h>
    int main(void)
    {
        int i, j, t, n;
        int a[100];
        scanf("%d",&n);
        getchar();
        for(i=0;i<n;i++)
        scanf("%d",&a[i]);      //遍历数组
        for(i=0;i<n-1;i++)      //进行n-1趟比较
        {
            for(j=0;j<n-1-i;j++)//每一趟进行n-1-i次比较
            {
                if(a[j]>a[j+1]) //相邻两个数比较
                t=a[j];
                a[j]=a[j+1];
                a[j+1]=t;
            }
        }
        for(i=0;i<n;i++)
        printf("%d ",a[i]);
        return 0;
    }

    算法分析

    冒泡排序法是稳定的,因为当两个数相等时,两个数不用交换,不会改变两个数的相对位置

     
  • 相关阅读:
    最长不下降子序列 从O(n)到O(nlogn)
    【NOIP1999】【洛谷P1020】导弹拦截
    【NOI2001】【洛谷P2024】食物链
    【2017中国大学生程序设计竞赛
    【2017中国大学生程序设计竞赛
    【NOIP】【洛谷P1029】最大公约数和最小公倍数问题
    【NOIP2009】【洛谷P1072】Hankson 的趣味题
    C++模板(2)
    Java中跳出循环的方法
    localeCompare() 方法实现中文的拼音排序
  • 原文地址:https://www.cnblogs.com/pufan/p/12049656.html
Copyright © 2011-2022 走看看