【算法基础】冒泡排序

原创 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;
           }
       }
   }
}



算法(一)---数学基础知识

用作测试,刚刚用极客皮肤不能生成目录。 算法(一)—数学基础知识 在开始正式的算法学习之前,先学一点数学的基础知识,有助于后面的学习。当然你已经具备这些知识,可以跳过这节内容。本人建议:即使一下内...
  • juejing2271
  • juejing2271
  • 2017年07月14日 14:59
  • 184

【BZOJ4534】基础排序算法练习题

#以后看见这种题目名字2B的我直接绕道走 #%%%策爷 #讲道理这种论文题我都没脸写题解 主要工作分为两部分,一部分是在(n^2+m)log(n)内预处理完所有操作,用一个序列代表所有可以被成功...
  • qq_34637390
  • qq_34637390
  • 2016年05月04日 22:10
  • 1105

转《零基础学习深度学习算法》

本文章转自别人 无论即将到来的是大数据时代还是人工智能时代,亦或是传统行业使用人工智能在云上处理大数据的时代,作为一个有理想有追求的程序员,不懂深度学习(Deep Learning)这个超热的技术,...
  • u011573853
  • u011573853
  • 2017年02月23日 21:10
  • 1196

几个经典基础算法题目

练习1,判断是否为素数: // ConsoleAppIsPrime1.cpp : 定义控制台应用程序的入口点。  //  /* *函数功能:判断一个输入的数是否为素数 *函数原形:bool ...
  • Alucard6y
  • Alucard6y
  • 2016年09月18日 08:48
  • 2869

java 算法基础

1、算法概要            算法是用于计算、数据处理和自动推理使用的。算法主要是做精确计算和表示一个有限长列的有效方法。算法一般包含清晰定义的指令用于计算函数。基本上也属于一种思考最简洁的方式...
  • sj13694848606
  • sj13694848606
  • 2016年08月30日 16:24
  • 2433

JS基础算法总结

排序算法说明 (1)排序的定义:对一序列对象根据某个关键字进行排序; 输入:n个数:a1,a2,a3,…,an 输出:n个数的排列:a1’,a2’,a3’,…,an’,使得a1’ ...
  • qq_33652761
  • qq_33652761
  • 2017年03月24日 22:06
  • 226

算法系列(一)基本概念

一、什么是算法 算法是完成一个任务所需的一系列步骤,计算机解决计算机问题,我们希望从一个计算机算法中获得两个结果,给定一个输入,它应该总能够产生该问题的正确输出结果,并且在运行该算法时,能够有效的利...
  • robertcpp
  • robertcpp
  • 2016年05月29日 10:17
  • 1916

图像处理常用算法(基础)

同图像灰度不同,边界处一般会有明显的边缘,利用此特征可以分割图像。需要说明的是:边缘和物体间的边界并不等同,边缘指的是图像中像素的值有突变的地方,而物体间的边界指的是现实场景中的存在于物体之间的边界。...
  • wahaha1_
  • wahaha1_
  • 2016年01月16日 20:13
  • 3121

Java基础算法集50题

本文转自:http://www.cnblogs.com/freeliver54/archive/2013/04/11/3013982.html  最近因为要准备实习,还有一个蓝桥杯的编程比赛,所以准...
  • u014490157
  • u014490157
  • 2015年05月21日 10:56
  • 1348

Java基础数据结构和算法

数据结构 Array数组 和C/C++以及其他语言一样,Java中的数组有差不多一样的语法。只是Java中除了8中基本类型,数组也是作为对象处理的,所以创建对象时也需要使用new关键字。和大多...
  • ada_dengpan
  • ada_dengpan
  • 2016年04月22日 22:46
  • 22592
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【算法基础】冒泡排序
举报原因:
原因补充:

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