菜鸟成长日记交换排序之——冒泡排序(C#)

冒泡排序(Bubble Sort)是一种最简单的交换排序。它的算法思想是比较相邻记录的关键字,如果发生逆序,则进行交换,从而使关键字大的往下"坠落"或者关键字小的往上"漂浮"

具体代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;


namespace 冒泡排序
{
    public class Bubblesort
        {
         public void Sort(int[]list)
         {
            int m = list.Length - 1;                //此变量m表示冒泡的轮数
            int flag = 1;                                  //flag标记用来检测是否发生了冒泡交换
            while ((m > 0) && (flag == 1))  //此循环用于控制冒泡的轮数
            {
                flag = 0;                                   //表明要发生交换,置flag=0
                for (int j = 0; j < m; j++)        //使用数组下标时一定要注意是否越界
                    if (list[j] > list[j + 1])
                    {
                        flag = 1;
                        int t;
                        t = list[j];
                        list[j] = list[j + 1];
                        list[j + 1] = t;
                    }
                m--;                                    //轮数减1


            }
         }

        }


    class Program
    {
        static void Main(string[] args)
        {


            int[] iArry = new int[] {49,38,65,97,76,13,27,49 };
            Bubblesort ii = new Bubblesort();
            ii.Sort(iArry);
            for (int i = 0; i < iArry.Length; i++)
                Console.Write("{0} ",iArry[i]);

        }
    }

}

时间复杂度: 最好情况为此序列已经排好序,只需进行n-1次比较;最坏情况为完全逆序,需要进行n-1趟排序,总的关 键字比较次数KCN为 n(n-1)/2,记录移动次数RMN为 3n(n-1)/2 (每比较一次都需进行三次记录移动)。故在平均情况下比较次数和记录移动数分别为n²/4和3n²/4,因此时间复杂度为O(n²)

空间复杂度: 仅仅借助一个辅助变量t,故空间复杂度为O(1)。

个人总结: 我学习冒泡排序时首先理解了大致的一个过程,在凭借自己的感觉去写这一段代码。我自己刚开始写的时候,并没有参考书上的代码。出现的问题是第一:以为标记flag没有用,其实不然,其原因是如果此序列要是已经有序的话,则标记不会改变,即不会进入while循环,排序结束。没有此标记的,尽管已经排好了序,还是要进入while循环,浪费时间; 第二是仅仅写了for循环,刚开始并没有要while循环,运行调试才发现,只冒了一个泡。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值