• c# 第20节 一维数据的冒泡排序


    本节内容:

    1:冒泡排序说明:

    2:冒泡排序实现:

    3:冒泡排序的时间复杂度

    1:冒泡排序说明:

    冒泡排序也是最简单最基本的排序方法之一。冒泡排序的思想很简单,就是以此比较相邻的元素大小,将小的前移,大的后移,就像水中的气泡一样,最小的元素经过几次移动,会最终浮到水面上。

    举例分析说明一下,如下数据:

    2 7 4 6 9 1 首先比较最后两个数字,发现1比9小,于是前移

    2 7 4 6 1 9 然后比较6和1

    2 7 4 1 6 9 继续前移,然后是4和1

    2 7 1 4 6 9 7和1比较

    2 1 7 4 6 9 2和1

    1 2 7 4 6 9 至此,第一趟冒泡过程完成,最小的元素1被移到第一个,不再参与后面的排序过程。下一趟冒泡过程同理,比较6和9,以此类推,最终得到结果。

    代码

    复制代码
            cout << "bubble sort:" << endl;
    printline("before sort:", v);
    for (int i=0; i<v.size(); i++){
    int temp = 0;
    for(int j=v.size()-1; j>0; j--){
    if (v[j] < v[j-1]){
    temp = v[j];
    v[j] = v[j-1];
    v[j-1] = temp;
    }
    }
    }
    printline("after sort:",v);
    复制代码

    2:冒泡排序实现:

     class Program
        {
            static void Main(string[] args)
    
            {
    
                int[] num1 = { 34, 11, 3, 4, 67, 8 };
                for (int j = 0; j < num1.Length;j++ ) //一共进行n个元素-1次
                { 
                    for (int i = 0; i < num1.Length - 1-j; i++)  //内循环的长度应该是一共循环的长度,减去已经排序好的
                    {
                    
                        if (num1[i]<num1[i+1]){     //进行升序排序,每次都是当前i跟下一次i的比较
                            int temp = num1[i];
                            num1[i] = num1[i + 1];
                            num1[i + 1] = temp;
                        }
    
                    }
    
                }
    
                foreach (int item in num1) { Console.WriteLine(item); }
    
    
                Console.ReadKey();
            }
        }

    3:冒泡算法复杂度

    1. 时间复杂度:O(n^2)

    冒泡排序耗时的操作有:比较 + 交换(每次交换两次赋值)。时间复杂度如下:

    1)        最好情况:序列是升序排列,在这种情况下,需要进行的比较操作为(n-1)次。交换操作为0次。即O(n)

    2)        最坏情况:序列是降序排列,那么此时需要进行的比较共有n(n-1)/2次。交换操作数和比较操作数一样。即O(n^2)

    3)        渐进时间复杂度(平均时间复杂度):O(n^2)

    1. 空间复杂度:O(1)

    从实现原理可知,冒泡排序是在原输入数组上进行比较交换的(称“就地排序”),所需开辟的辅助空间跟输入数组规模无关,所以空间复杂度为:O(1)

     

    (三)稳定性

    冒泡排序是稳定的,不会改变相同元素的相对顺序。

  • 相关阅读:
    WinService12r2系统加固-3389端口与端口安全
    WinService12r2系统加固-账户管理与服务安全
    渗透测试常用工具-stunnel内网穿透
    渗透测试常用工具-ptunnel内网穿透
    报错注入函数
    常见绕过disable_function(抄录)linux系统。windows系统大概只有com组件
    nmap(抄录)
    php回调木马
    NoSql注入小测试。
    日志:记一次网页篡改(从开始到质保)一个渗透工作者的工作之路
  • 原文地址:https://www.cnblogs.com/hero799/p/8662302.html
Copyright © 2020-2023  润新知