zoukankan      html  css  js  c++  java
  • 冒泡排序

    冒泡排序
     
    1、冒泡排序思想:
     
    根据大小交换相邻的两个元素的位置,从后向前(或是从前向后)一直将相邻的两个元素进行交换,
    直到最大或是最小的元素处于数组的最左边或是最右边(这看你是按哪种大小顺序进行排序).
     
    2、时间复杂度:
     
    (1)、算法的最好时间复杂度
    若文件的初始状态是正序的,一趟扫描即可完成排序.所需的关键字比较次数C和记录移动次数M均达到最小值:
    Cmin=n-1
    Mmin=0。
    冒泡排序最好的时间复杂度为O(n.。
     
    (2)、算法的最坏时间复杂度
    若初始文件是反序的,需要进行n-1趟排序。每趟排序要进行n-i次关键字的比较(1≤i≤n-1),且每次比较都必须移动记录三次来达到交换记录位置.在这种情况下,比较和移动次数均达到最大值:
    Cmax=n(n-1)/2=O(n2)
    Mmax=3n(n-1)/2=O(n2)
    冒泡排序的最坏时间复杂度为O(n2).
     
    (3)、算法的平均时间复杂度为O(n2)
    虽然冒泡排序不一定要进行n-1趟,但由于它的记录移动次数较多,故平均时间性能比直接插入排序要差得多.
     
    3、例子说明
     
    10,20,30,40,50,60,70 将这七个数按从大到小排序
     
    10,20,30,40,50,60,70 原始数据7个元素
     
    20,30,40,50,60,70,10 第1趟 比较6次
     
    30,40,50,60,70,20,10 第2趟 比较5次
     
    40,50,60,70,30,20,10 第3次 比较4次
     
    50,60,70,40,30,20,10 第4次 比较3次
     
    60,70,50,40,30,20,10 第5次 比较2次
     
    70,60,50,40,30,20,10 第6次 比较1次
     
    也就是n个元素需要排n-1趟
    第t趟比较的次数为n-t次
     
    给出一组数字,将这一组数字按从小到大的顺序排序.
     
    代码如下:
     
    namespace 冒泡排序
    {
        class Program
        {
            static void Main(string[] args)
            {
                int[] score = { 4,6,4,6,3,754,6,7,3,54,5,44,9};
                for (int i = 0; i < score.Length - 1; i++)//控制比较的趟数,这个循环一次表示比较了一趟
                {
                    for (int j = 0; j < score.Length - i - 1; j++)//控制比较次数
                    {
                        if (score[j] > score[j + 1])//两两比较
                        {
                            //符合条件前后两数字交换
                            int temp = score[j];
                            score[j] = score[j + 1];
                            score[j + 1] = temp;
                        }
                    }
                }
                Console.WriteLine("从小到大排序为:");
                for (int i = 0; i < score.Length; i++)
                {
                    Console.Write(score[i]+" ");
                }
                Console.ReadKey();
            }
        }
    }
     
  • 相关阅读:
    13.kubernetes之pv,pvc,configmap(带补充实例)
    1.docker 数据卷的备份和恢复(非大数据量)
    mysql基础 事务的认识和使用
    jdbc基础 (四) 批处理
    jdbc基础 (三) 大文本、二进制数据处理
    mysql使用基础 sql语句(一)
    linux下安装openssh-server
    jdbc基础 (二) 通过properties配置文件连接数据库
    jdbc基础 (一) MySQL的简单使用
    windows API 开发飞机订票系统 图形化界面 (四)
  • 原文地址:https://www.cnblogs.com/zcz527/p/3107124.html
Copyright © 2011-2022 走看看