经典排序算法 - 冒泡排序Bubble sort

转载 2016年06月01日 15:46:34

原理是临近的数字两两进行比较,按照从小到大或者从大到小的顺序进行交换,

这样一趟过去后,最大或最小的数字被交换到了最后一位,

然后再从头开始进行两两比较交换,直到倒数第二位时结束,其余类似看例子

例子为从小到大排序,

原始待排序数组| 6 | 2 | 4 | 1 | 5 | 9 |


第一趟排序(外循环)

第一次两两比较6 > 2交换(内循环)

交换前状态| 6 | 2 | 4 | 1 | 5 | 9 |

交换后状态| 2 | 6 | 4 | 1 | 5 | 9 |

 

第二次两两比较,6 > 4交换

交换前状态| 2 | 6 | 4 | 1 | 5 | 9 |

交换后状态| 2 | 4 | 6 | 1 | 5 | 9 |

 

第三次两两比较,6 > 1交换

交换前状态| 2 | 4 | 6 | 1 | 5 | 9 |

交换后状态| 2 | 4 | 1 | 6 | 5 | 9 |

 

第四次两两比较,6 > 5交换

交换前状态| 2 | 4 | 1 | 6 | 5 | 9 |

交换后状态| 2 | 4 | 1 | 5 | 6 | 9 |

 

第五次两两比较,6 < 9不交换

交换前状态| 2 | 4 | 1 | 5 | 6 | 9 |

交换后状态| 2 | 4 | 1 | 5 | 6 | 9 |

 

第二趟排序(外循环)

第一次两两比较2 < 4不交换

交换前状态| 2 | 4 | 1 | 5 | 6 | 9 |

交换后状态| 2 | 4 | 1 | 5 | 6 | 9 |

 

第二次两两比较,4 > 1交换

交换前状态| 2 | 4 | 1 | 5 | 6 | 9 | 
交换后状态| 2 | 1 | 4 | 5 | 6 | 9 |

 

第三次两两比较,4 < 5不交换

交换前状态| 2 | 1 | 4 | 5 | 6 | 9 | 
交换后状态| 2 | 1 | 4 | 5 | 6 | 9 |

 

第四次两两比较,5 < 6不交换

交换前状态| 2 | 1 | 4 | 5 | 6 | 9 |

交换后状态| 2 | 1 | 4 | 5 | 6 | 9 |

 

第三趟排序(外循环)

第一次两两比较2 > 1交换

交换后状态| 2 | 1 | 4 | 5 | 6 | 9 |

交换后状态| 1 | 2 | 4 | 5 | 6 | 9 |

 

第二次两两比较,2 < 4不交换

交换后状态| 1 | 2 | 4 | 5 | 6 | 9 | 
交换后状态| 1 | 2 | 4 | 5 | 6 | 9 |

 

第三次两两比较,4 < 5不交换

交换后状态| 1 | 2 | 4 | 5 | 6 | 9 | 
交换后状态| 1 | 2 | 4 | 5 | 6 | 9 |

 

第四趟排序(外循环)无交换

第五趟排序(外循环)无交换


排序完毕,输出最终结果1 2 4 5 6 9

代码仅供参考

//冒泡排序法
/*
 * 冒泡排序法
 通过对待排序序列从后向前(从下标较大的元素开始),
 一次比较相邻元素的排序码,若发现逆序列则交换,
 是排序码较小的元素主键从后部移向前部(
 从小表较大的单元移向下标较小 单元)
 */
class Bubble_sort
{
	public void sort(int arr[])
	{
		int temp;
		//
		for(int i=0;i<arr.length-1;i++)   //外层循环,决定一共走几次
		{
			//内层循环,开始逐个比较,如果发现前一个数比后一个数大,则交换
			for(int j=0;j<arr.length-1-i;j++)
			{
				if(arr[j]>arr[j+1])
				{
					//exchange
					temp=arr[j];
					arr[j]=arr[j+1];
					arr[j+1]=temp;
				}
			}
		}
	}
}

排序算法之冒泡排序<Bubble_Sort>及其C语言代码实现

概述 冒泡排序是一种相对简单的排序,它每次比较相邻的两个元素,如果前者大于后者,则交换< swap >这两个元素(从小到大排序),这样每一趟比较就把大的元素沉入最后,形象的称之为“冒泡”,每走一趟,...
  • gl486546
  • gl486546
  • 2016年11月05日 23:00
  • 2157

图解排序算法及C语言实现之 ------ 冒泡排序:Bubble Sort

近来闲着没事,把数据结构温习了一遍,想着用图解的方式来描述一下排序的算法。好了,废话少说,下面进入正题。 先讲最简单的冒泡排序。         1.什么叫冒泡排序?             形象的说...
  • fuyongming
  • fuyongming
  • 2014年01月10日 14:26
  • 1485

冒泡排序(Bubble_Sort)

冒泡排序算法是一个耳熟能详的算法,在我们学习计算机的专业课的时候,在课本中经常会见到该程序,作为一个非常简单的例子程序。如果你不能默写该算法,那么你就没学过计算机的相关课程。好了,不说闲话了。 冒泡...
  • u011456016
  • u011456016
  • 2015年12月09日 17:44
  • 368

记录一下冒泡排序和sort()排序

今天有空,整理了一下写过的javascript排序方法。排序方法很多,我了解的不算多,这里记录下知道的冒泡排序和js自带的sort()排序。 1. 冒泡排序 function BubbleSort(a...
  • ChauncyWu
  • ChauncyWu
  • 2017年03月28日 23:58
  • 764

cuda并行结构下的冒泡排序

两两比较的冒泡排序 2n-1次 奇数和它右边的比较交换 2n次 偶数和他右边比较交换  Algorithm 9.3 Sequential odd-even transposition sort ...
  • yangdagun
  • yangdagun
  • 2017年04月21日 16:54
  • 335

冒泡排序练习(Bubble Sort)

一. 目的 1)交换排序就是,调整序列中不符合顺序的元素进行交换,最终序列整体符合目标次序。 2)进行冒牌排序练习。 3)算法证明: 初始:将第二个元素与第一个元素进行调整,使之符合从小到大数...
  • losteronly
  • losteronly
  • 2016年03月24日 22:29
  • 260

【排序】冒泡排序Bubble Sorting的特点

总结一下冒泡排序 示例源码: int[] array = { 300, 1000, 1, 1200, 2000, 350, 500, 800 }; int temp = 0; ...
  • shamingai
  • shamingai
  • 2016年09月24日 20:36
  • 555

【排序算法】冒泡排序原理及Java实现

冒泡排序顾名思义就是整个过程像气泡一样往上升,单向冒泡排序的基本思想是(假设由小到大排序):对于给定n个记录,从第一个记录开始依次对相邻的两个记录进行比较,当前面的记录大于后面的记录时,交换位置,进行...
  • jianyuerensheng
  • jianyuerensheng
  • 2016年04月26日 21:26
  • 6763

关于Sort排序与冒泡法的区别

Sort排序和冒泡法的异同   对数组a{2,4,3,6,2,8,1}进行排序。 快速排序法 原理: 对于数组a{2,4,3,6,2,8,1} ①  需要选取一个关键元素作为基准元素key...
  • hpjn_ycw
  • hpjn_ycw
  • 2015年09月03日 21:48
  • 1064

经典排序算法(1)——冒泡排序算法详解

冒泡排序(Bubble Sort)是一种典型的交换排序算法,通过交换数据元素的位置进行排序。 一、算法基本思想 (1)基本思想 冒泡排序的基本思想就是:从无序序列头部开始,进行两两比较,根据大...
  • guoweimelon
  • guoweimelon
  • 2016年03月16日 10:52
  • 17985
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:经典排序算法 - 冒泡排序Bubble sort
举报原因:
原因补充:

(最多只允许输入30个字)