zoukankan      html  css  js  c++  java
  • [算法初步]之冒泡排序

    [算法初步]之冒泡排序
    ##1 描述
    冒泡排序是一种交换排序的方法。
    
    1)从一个方向开始比较,如果小于后面的数字,则交换位置。直到最小数字被交换到另一端。
    
    2)持续循环,从最小数字一直到最大数字都完成排序。
    
    ##2 场景
    首选假设一根试管里面有N个气泡,这些气泡都是大小不同的,数字代表大小,但是这些气泡没有排序好的。如下:
    
    * 底层 [3, 5, 1, 7, 6, 2, 11, 13, 4] 上面
    
    我们假设小气泡的浮力比较大,大气泡更容易沉在水滴。但是眼前的这个排列明显不合规矩的,因为我们需要的是大的气泡沉在底下,
    而小的气泡浮在上面。这样才符合我们的期望。
    
    很明显,这个状态时不稳定的,必然会发生变化。这个变化的过程就是一个排序的过程。
    
    但是明显的这些气泡没有那么宽阔的视野,他们只能看到旁边的气泡。
    从最底层开始,气泡开始躁动上浮了。他们会从最底下的那个,开始向上比较,如果发现自己个头小了,就会挤着上面的气泡交换位置。
    
    比如:开始的3号的泡泡和5号的泡泡比较,明显3号的泡泡更小一些,这货就对直接把5号泡泡挤下去了,两者交换了位置。
    
    * [3, 5, 1, 7, 6, 2, 11, 13, 4] (3和5交换)
    * [5 ,3, 1, 7, 6, 2, 11, 13, 4] 
    
    然后3号泡泡继续和后面的1号气泡比较,发现自己没有1号的泡泡小,浮上不去了。于是这货对1号泡泡说,我先歇会,你先上去吧。
    * [5, 3, 1, 7, 6, 2, 11, 13, 4]	(3不动,1开始比较)
    
    然后1号泡泡继续往后面比较,如果比后面的小就继续上浮,否则的话就会位置继续接力。在多次交换之后,最小的气泡终于交换到最上面了。
    
    * [5, 3, 1, 7, 6, 2, 11, 13, 4]	(1和7交换)
    * [5, 3, 7, 1, 6, 2, 11, 13, 4] (1和6交换)
    * [5, 3, 7, 6, 1, 2, 11, 13, 4]  
    ....
    * [5, 3, 7, 6,2, 11, 13, 4] [1]	(最小数字排序完成)
    
    接下来就是循环执行了,将第二小的泡泡浮上来...一直到到所有的气泡都交换到自己的位置。
    
    * [5, 7, 6, 3, 11, 13, 4] [2, 1]
    * [7, 6, 5, 11, 13, 4] [3, 2, 1]
    * [7, 6, 11, 13, 5] [4, 3, 2, 1]
    * [7, 11, 13, 6] [5, 4, 3, 2, 1]
    * [11, 13, 7] [6, 5, 4, 3, 2, 1]
    * [13, 11] [7, 6, 5, 4, 3, 2, 1]
    * [13] [11, 7, 6, 5, 4, 3, 2, 1]
    
    
    ##3 go语言实现:
    
    	package main
    	
    	import "fmt"
    	
    	/*
    	 * [冒泡排序]场景:
    	 * 一堆N个气泡,从上至下排成一条直线。左边为底下,未排好序。右边为顶层,已排好序。
    	 * 首先,对所有气泡开始判断【N-1次】,由底下至上面,如果比上面的小就交换位置。
    	 * 第一次执行完成,最小的气泡会浮出到最上面。
    	 * 其次,对第2到结束进行判断【N-2次】。如果比上面的小就交换位置。
    	 * 第二次执行完成,第二小的气泡浮到次上面。
    	 * 一直重复进行。共执行N-1次直到所有的气泡排序完成
    	 */
    	
    	func BubbleSort(data *[9]int) {
    		for i := 0; i < len(data)-1; i++ {
    			// 每次将最小的元素浮出到len-i的位置
    			for j := 0; j < len(data)-1-i; j++ {
    				if data[j] < data[j+1] {
    					// 交换前后元素
    					data[j], data[j+1] = data[j+1], data[j]
    				}
    			}
    	
    		}
    	
    	}
    	
    	func main() {
    	
    		data := [9]int{3, 5, 1, 7, 6, 2, 11, 13, 4}
    		BubbleSort(&data)
    		for x := 0; x < len(data); x++ {
    			fmt.Print(data[x], ",")
    		}
    		fmt.Println()
    	}
    
    
    
    
  • 相关阅读:
    CDN技术分享
    大型网站架构技术一览
    Remember-Me功能
    spring-security用户权限认证框架
    关于 tomcat 集群中 session 共享的三种方法
    Nginx+Tomcat+Terracotta的Web服务器集群实做
    Terrocotta
    使用hibernate tools插件生成POJO
    Session简介
    Cookie设置HttpOnly,Secure,Expire属性
  • 原文地址:https://www.cnblogs.com/sxt102400/p/3022759.html
Copyright © 2011-2022 走看看