• 冒泡排序算法(C#实现)


    简单的冒泡排序算法,代码如下:

    //冒泡排序(从数组的起始位置开始遍历,以大数为基准:大的数向下沉一位)
    privatestaticvoid BubbleSortFunction(int[] array)
    {
    try
    {
    int length = array.Length;
    int temp;
    bool hasExchangeAction; //记录此次大循环中相邻的两个数是否发生过互换(如果没有互换,则数组已经是有序的)

    for (int i =0; i < length -1; i++) //数组有N个数,那么用N-1次大循环就可以排完
    {
    hasExchangeAction
    =false; //每次大循环都假设数组有序

    for (int j =0; j < length - i -1; j++) //从数组下标0处开始遍历,(length - i - 1 是刨除已经排好的大数)
    {
    if (array[j] > array[j +1]) //相邻两个数进行比较,如果前面的数大于后面的数,则将这相邻的两个数进行互换
    {
    temp
    = array[j];
    array[j]
    = array[j +1];
    array[j
    +1] = temp;
    hasExchangeAction
    =true; //发生过互换
    }
    }

    if (!hasExchangeAction) //如果没有发生过互换,则数组已经是有序的了,跳出循环
    {
    break;
    }
    }
    }
    catch (Exception ex)
    { }
    }

    冒泡排序是一种用时间换空间的排序方法,最坏情况是把顺序的排列变成逆序,或者把逆序的数列变成顺序。在这种情况下,每一次比较都需要进行交换运算。
    举个例子来说,一个数列 5 4 3 2 1
    进行冒泡升序排列,第一次大循环从第一个数(5)开始到倒数第二个数(2)结束,比较过程:先比较5和4,4比5小,
    交换位置变成4 5 3 2 1;比较5和3,3比5小,交换位置变成4 3 5 2 1……
    最后比较5和1,1比5小,交换位置变成4 3 2 1 5。这时候共进行了4次比较
    交换运算,最后1个数变成了数列最大数。

    第二次大循环从第一个数(4)开始到倒数第三个数(2)结束。进行3次比较交换运算。
    ……
    所以总的比较次数为 4 + 3 + 2 + 1 = 10次
    对于n位的数列则有比较次数为 (n-1) + (n-2) + ... + 1 = n * (n - 1) / 2,这就得到了最大的比较次数
    而O(N^2)表示的是复杂度的数量级。举个例子来说,如果n = 10000,那么 n(n-1)/2 = (n^2 - n) / 2 = (100000000 - 10000) / 2,相对10^8
    来说,10000小的可以忽略不计了,所以
    总计算次数约为0.5 * N^2。用O(N^2)就表示了其数量级(忽略前面系数0.5)。
  • 相关阅读:
    【Python爬虫】:爬取干货集中营上的全部美女妹子(翻页处理)
    python进阶之py文件内置属性
    Delphi
    Goland debug 报错:could not launch process: decoding dwarf section info at offset 0x0: too short
    Goland 生成可执行文件
    代理加速配置详解
    关掉所有代码折叠folding
    前端工程化概述(转发)
    Reactjs —— 前端框架切换
    TODO——多线程
  • 原文地址:https://www.cnblogs.com/kloseking/p/3165704.html
Copyright © 2020-2023  润新知