• 算法冒泡排序


    冒泡排序的原理:简单的说,就是对数组里面的数字进行两两比较,较大的数不断地被交换上去,就像冒泡一样。每进行一轮排序,就是把最大的数找出来。

    下面是实现算法一:

    public void BubbleSort(int[] numbers)
    		{
    			int temp;
    			for (int i = 0; i < numbers.Length - 1; i++)
    			{
    				for (int j = 0; j < numbers.Length - 1; j++) 
    				{
    					if (numbers[j] > numbers[j + 1]) {
    					temp = numbers[j];
    					numbers[j] = numbers[j + 1];
    					numbers[j + 1] = temp;
    					}
    				}
    			}
    		}

    上面的实现方式是不管哪种情况,都要比较每2个数字,即比较n*n次。即使前面几轮的排序已经把较大的数找出来,后面的排序依然会对这些数进行比较,但实际上并不需要了。
    见优化后的算法二:

    public void BubbleSort(int[] numbers)
    		{
    			int temp;
    			for (int i = numbers.Length - 2; i > 0; i--)
    			{
    				for (int j = 0; j < i; j++) 
    				{
    					if (numbers[j] > numbers[j + 1]) {
    					temp = numbers[j];
    					numbers[j] = numbers[j + 1];
    					numbers[j + 1] = temp;
    					}
    				}
    			}
    		}

    这种实现方式是保持外循环次数不变的情况下,减小内循环的范围,如果已经得到较大的数,则不需要比较。这种情况,需要比较n(n-1)/2次,是不是还可以在优化呢,比如说,数组本来就是排好序的,这时候我们再不停地进行比较就比较多余了。

    见优化后的算法三:

    public void BubbleSort(int[] numbers)
    		{
    			int temp;
    			bool flag = false;	//判断是否进行过数字的比较
    			for (int i = numbers.Length - 2; i > 0; i--)
    			{
    				//从第二轮比较开始,如果前面没有进行过比较,那么该数组是排好序的,跳出循环
    				if (!flag && i < numbers.Length - 2) {
    					return;
    				}
    				for (int j = 0; j < i; j++) 
    				{
    					if (numbers[j] > numbers[j + 1]) {
    					temp = numbers[j];
    					numbers[j] = numbers[j + 1];
    					numbers[j + 1] = temp;
    					flag = true;
    					}
    				}
    			}
    		}

    改进后的算法,最好的情况下只需要进行一轮的排序,比较n次,最坏的情况也同算法二,比较n(n-1)/2次。

    小结:冒泡排序是比较简单的排序算法,容易理解、编程,而且比较稳定,相等数字的相对位置是不会变的。

  • 相关阅读:
    pandas 学习 第2篇:Series -(创建,属性,转换和索引)
    pandas 学习 第1篇:pandas基础
    linux中的软连接和硬链接
    分布式与集群的简单讲解
    Redis持久化
    CentOS7安装后无法使用鼠标选中,复制问题解决
    centos 7 安装 ifconfig 管理命令
    ES分布式文档数据库讲解
    Storm,Spark和Flink三种流式大数据处理框架对比
    mvn常见参数命令讲解
  • 原文地址:https://www.cnblogs.com/zhaohuayang/p/2230735.html
Copyright © 2020-2023  润新知