zoukankan      html  css  js  c++  java
  • 初级系列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("
    ");
    }
    

  • 相关阅读:
    WindowsServer2003SP2EnterpriseEdition激活码
    2016/12/14渗透学习总结
    技术之路注定孤独
    几道office题的总结
    一路走来,只是清风
    【IIS】IIS中同时满足集成模式和经典模式
    IntelliJ IDEA如何build path
    kafka的集群安装
    尚硅谷 kafka
    队列
  • 原文地址:https://www.cnblogs.com/xzpin/p/11484525.html
Copyright © 2011-2022 走看看