【算法基础】冒泡排序

原创 2013年12月05日 00:32:06

1. 算法描述

冒泡排序(Bubble Sort)是一种简单的排序方法,它重复地走访要排序的数列,每次比较两个元素,如何顺序错误则把它们交换过来;


冒泡排序的算法步骤如下:

  1. 比较相邻的元素,若第一个比第二个大,就交换他们两个;
  2. 对每一对相邻的元素做同样的工作,从开始第一对到结尾的最后一对;交换后,最后的元素应该是最大的;
  3. 针对所有的元素,重复上面的步骤,除了最后一个;
  4. 持续对越来越少的元素重复上面的步骤,直到没有任何一对元素需要比较为止;



2. 算法实现

2.1. 基本实现:

/**
 * @param array 
 * @param n the size of array
 */
void bubbleSort(int array[], int n)
{
    for (int i = 0; i < n; i++)
    {
	 for (int j = 1; j < n - i; j ++)
	 {
	     if (array[j - 1] > array[j])
	     {
		 swap(array[j - 1], array[j]);
	     }
	 }
    }
}

2.2. 使用标志的冒泡排序:

描述:设置一个标志,如果一趟排序发生了交换,则设为true,否则为false;如果一趟排序没发生交换,则说明排序完成;

/**
 * @param array 
 * @param n the size of array
 */
void bubbleSort(int array[], int n)
{
   bool flag = true;
   int k = n;
   
   while (flag)
   {
       flag = false;
	   
       for (int i = 1; i < k; i++)
       {
           if (array[i -1] > array[i])
	   {
               swap(array[i - 1], array[i]);
	       flag = true;
	   }
       }
	   
       k--;
   }
}

2.3. 记录每趟排序最后交换的位置

描述:每趟排序记录下最后发生交换的位置,则后面的元素已经排好序了;下一趟只需比较到上一次记录的发生交换的位置即可;

/**
 * @param array 
 * @param n the size of array
 */
void bubbleSort(int array[], int n)
{
   int flag = n; // the index of stopping checking
   int k = n;
   
   while (flag > 0)
   {
       k = flag;
	   
       for (int i = 1; i < k; i++)
       {
	   if (array[i -1] > array[i])
	   {
               swap(array[i - 1], array[i]);
               flag = i;
           }
       }
   }
}



版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

算法基础之冒泡排序

冒泡排序

基础算法系列(二)——冒泡排序

和选择排序同样,冒泡排序也是经典的排序算法,很多入门课程讲的第一个算法就是它。所谓冒泡,指排序过程中元素的移动方式就像上浮的气泡,非常形象。 算法思想: 1、从后向前遍历,把当前元素与其前驱元素排...

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

基础算法——冒泡排序

冒泡排序是基于交换排序的基本思想,两两进行比较,一旦不满足次序要求则进行交换,直到整个序列全部满足要求为止。

黑马程序员——C语言基础——冒泡排序算法探究

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
  • Elors
  • Elors
  • 2015-06-01 16:30
  • 321

一步一步复习数据结构和算法基础-单链表冒泡排序

其实个人以为用单链表排序就是自己找麻烦,用数组排序多好啊, 但是转念一想,还是挑战一下自己吧,这个程序的声明和前几次的不同,但是仅仅是换汤不换药. 谨以此作为链表的练习吧. #include #...

几个基础算法介绍和实现——冒泡排序

冒泡排序 看名字就很熟悉很形象,接触到的第一次排序算法就是冒泡算法 冒泡排序法算法描述 依次比较相邻二个数据,如果前面数据大于后面的数据就将二个数据交换。 对长度为N的组数,从第0个遍历到第N-1...

算法基础之冒泡排序

首先讲一下冒泡排序的基本算法思想  。 假设有这样一个数组 var arr  =  [3,4,6,1,7,2,5,8];  需要我们从小到大对其进行排序。我们从数组的第一个元素开始,依次比较相邻的...

基础算法---冒泡排序法

冒泡排序 先说一下概念: 它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。 简单的...

基础算法之一 冒泡排序的三种实现

冒泡排序是非常容易理解和实现的,以从小到大排序举例: 设数组长度为N. 1.比较相邻的前后两个数据,如果前面数据大于后面的数据, 就将两个数据交换。 2.这样对数据的第0个数据到N-1个数...

基础算法之冒泡排序

一、前言(算法实现将采用Java语言) 大家还记得上篇博文中, 讲解的基础算法之插入排序吗, 插入排序跟冒泡排序的算法逻辑都很类似。 今天还是采取从小到大的排列方式进行比较, 等会儿通过代码以...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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