• 初级系列8.冒泡排序


    冒泡排序

    问题描述

    对N个整数(数据由键盘输入) 进行升序排列

    问题分析

    冒泡排序是在两个相邻元素之间进行比较交换的过程将一个无序表变成有序表

    思想:从表头开始往后扫描数组,在扫描过程中逐对比较相邻两个元素的大小

    ​ 若相邻两个元素中,前面的元素大于后面的元素,则将它们互换,称之为

    ​ 消去一个逆序,在扫描过程中,不断将两相邻元素中的大者往后移动,最后就将

    ​ 数组中的最大者换到了表的最后,这正是数组中最大元素应有的位置,然后,在剩下的

    ​ 数组元素中(n-1个元素)重复上面的过程,将次小元素放到倒数第2个位置。不断重复上述过程

    ​ 直到剩下的数组元素为零为止,此时的数组就变为了有序

    假设数组元素的个数为n,在最坏情况下需要的比较总次数为:((n-1) + (n-2) + .... + 2 + 1) = n(n-1)/2

    算法设计

    双层循环,第一层循环控制交换的轮数,第二层循环控制每轮需要交换的次数

    /* !< use c */
    #include <stdio.h>
    
    #define N 3    /* !< 数组大小改变时只需要改变N对应的值不需要改动程序 */
    
    int main(void)
    {
        int i, j, a[N], t, count = 0;
        printf("为数组元素赋初值:
    ");
        for (i = 0; i < N; i++) {
            scanf("%d", &a[i]);
        }
        for (i = 1; i <= N-1; i++) {        /* !<控制比较的轮数 */
            for (j = 0; j < N-i; j++) {     /* !<控制每轮比较的次数 */
                if (a[j] > a[j+1]) {        /* !<数组相邻两个元素进行交换 */
                    t = a[j];
                    a[j] = a[j+1];
                    a[j+1] = t;
                }
            }
        }
    
        printf("经过交换后的数组元素为:
    ");
        for (i = 0; i  < N; i++) {
            count++;
            printf("%d ", a[i]);
            if (count % 5 == 0) {       //控制每行输出5个数
                printf("
    ");
            }
        }
        printf("
    ");
    }
    

  • 相关阅读:
    急招.NET系列职位
    程序员成长的三个方法
    xwebkitspeech
    张小龙的产品
    浅析商业银行“业务连续性管理体系”的构建
    Sonar for dotNet
    Moles测试Contrustor时候遇到的一个问题
    EntityFramework 用Moles的mock
    Accessor中Generic的元素是internal/private的会导致转换失败的异常
    Android自用Intent 介绍
  • 原文地址:https://www.cnblogs.com/xzpin/p/11484525.html
Copyright © 2020-2023  润新知