排序系列算法——冒泡排序

冒泡排序

什么是冒泡排序

如果大家平常有即系观察水泡付出谁面的情况就可以发现水泡从下往上是逐渐增大的,升到即将浮出水面的时候往往是水泡最大的时候,如下图所示。

冒泡排序的原理跟这个情况很类似,让子序列中的最大元素不断沉底,达到排序的目的。说白了,冒泡排序一共经过N-1次遍历,其中第i次遍历前N-i个元素(第i+1到N个元素已经排序完毕),将第i大的元素移动到N-i的位置 。

冒泡排序的过程可描述如下:

令A表示进行排序的数组,N表示A的长度,A[i]表示数组A第i+1个元素,i=1,1,2,3...N

第一次遍历:

从i=0开始,遍历前N个元素,如果A[i]>A[i+1],则交换A[i]与A[i+1]的值,第一次遍历将前N个元素中的最大值将会出现第N个位置上;

第二次遍历:

从i=0开始,遍历前N-1个元素,如果A[i]>A[i+1],则交换A[i]与A[i+1]的值,第二次遍历将前N-1个元素中的最大值将会出现第N-1个位置上;

……

第N-1次遍历:

最后一次遍历就是对比A[0]和A[1],若A[0]>A[1],则交换两者的位置,排序结束;否则,不进行交换,排序结束。

冒泡过程演示

对数组A={14,5,16,4,7,9}从小到大进行排序,冒泡排序的过程如下:

第一次遍历:

第二次遍历:

第三次遍历:

最后一次遍历:

C++版代码实现

 1 #include "stdafx.h"
 2 #include <iostream>
 3 using namespace std;
 4 void BubbleSOrt(int *values,int length){
 5     int temp=0;
 6     for(int i=length-1;i>0;i--){
 7         for(int j=0;j<i;j++){
 8             if(*(values+j)>*(values+j+1)){
 9                 temp=*(values+j);
10                 *(values+j)=*(values+j+1);
11                 *(values+j+1)=temp;
12             }
13         }
14     }
15 }
16 int main(int argc, _TCHAR* argv[])
17 {
18     int values[]={14,5,8,20,13,11};
19     BubbleSOrt(values,6);
20     for(int i=0;i<6;i++){
21         cout<<*(values+i)<<endl;
22     }
23     return 0;
24 }
时间: 2024-10-09 22:12:08

排序系列算法——冒泡排序的相关文章

排序系列之——冒泡排序、插入排序、选择排序

排序之——冒泡排序: 基本思想:假设待排序表长为N,从后往前(或者从前往后)两两比较相邻元素的值,若为逆序(arr[i-1]>arr[i]),则交换他们,直到序列比较完.这时一趟冒泡. 代码如下: 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 #include <time.h> 5 #define N 20 6 7 void print_Arr(int *arr,

排序系列之冒泡排序

冒泡排序 冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法. 它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成. 这个算法的名字由来是因为越大的元素会经由交换慢慢"浮"到数列的顶端,故名. 算法原理 冒泡排序算法的运作如下:(从后往前) 比较相邻的元素.如果第一个比第二个大,就交换他们两个. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对.在这

排序系列算法——插入排序

1. 原理 插入排序是顾名思义是将未进行排序的元素不断插入到已排序序列中的排序方法.如下图所示: 插入排序说白点就是在以排序的序列中找到未排序元素的位置,并将元素插入行程新的已排序序列的过程. 2.排序过程及算法设计 排序过程 以一个实际的例子为例: 设有序列{7,9,6,12,15,11},使用插入排序对上述的序列按从小到大进行排序,排序的过程可描述如下: 算法设计 插入排序是将元素插入已排序序列的过程,排序过程需要将元素与已排序的序列元素进行对比,采用从后往前的对比顺序,不断向前移动,直到不

排序系列算法——堆排序

堆:大根堆与小根堆 堆排序是建立在堆基础上的排序方法,首先了解一下什么是堆. 常用的堆一般有两种,大根堆和小根堆.堆可以看做是一棵二叉树,其父节点的值总是大于(大根堆)或者小于(小根堆)子节点的值.举一个例子: 图1 不满足堆的条件                 图2大根堆                             图3 小根堆 图1不是堆,因为不满足父节点的值大于或者小于子节点的值: 图2是大根堆,根节点是最大值,父节点都大于或等于子节点的值: 图3是小根堆,根节点是最小值,父

排序算法系列:冒泡排序与双向冒泡排序

概述 排序算法应该算是一个比较热门的话题,在各个技术博客平台上也都有一些博文进行了一定程度的讲解.但还是希望能从自我完善的角度出发,可以更详细.全面.形象地表达这些算法的精髓.本文就先从最简单的冒泡排序开始说起,别说你已经彻底了解了冒泡排序算法(虽然一开始我也是这样以为的). 版权说明 本文链接:http://blog.csdn.net/lemon_tree12138/article/details/50474230 – Coding-Naga - 转载请注明出处 目录 概述 版权说明 目录 冒

白话排序算法--冒泡排序

前言: 这两天研究排序的算法,算法理解起来比较抽象,不拿笔划着走着就容易绕进去,所以就想出了以体育课排队列的方式进行演示 系列的其他篇章的情景同上 冒泡排序:  重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没有再需要交换,也就是说该 数列已经排序完成. 情景描述: 体育课上,老师需要一个纵列(从低到高竖着站一排),集合的时候大家随便凑了一列,但是高低不齐,一共6个人这时老师说,我给你们个办法,按照我的办法,你们自己排列队形. 从第

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

 原文出自于 http://www.cnblogs.com/kkun/archive/2011/11/23/bubble_sort.html 经典排序算法 - 冒泡排序Bubble sort 原理是临近的数字两两进行比较,按照从小到大或者从大到小的顺序进行交换, 这样一趟过去后,最大或最小的数字被交换到了最后一位, 然后再从头开始进行两两比较交换,直到倒数第二位时结束,其余类似看例子 例子为从小到大排序, 原始待排序数组| 6 | 2 | 4 | 1 | 5 | 9 | 第一趟排序(外循环) 第

C语言中的排序算法--冒泡排序,选择排序,希尔排序

冒泡排序(Bubble Sort,台湾译为:泡沫排序或气泡排序)是一种简单的排序算法.它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成.这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端 维基百科:点击打开链接 [cpp] view plain copy /* 用选择法对10个数进行排序 */ #include<stdio.h> void main() { int i,j,

排序算法—冒泡排序

*/--> 排序算法-冒泡排序 Table of Contents 1 问题描述 2 冒泡排序(Bubble) 2.1 冒泡排序(一) 2.2 冒泡排序(二) 2.3 冒泡排序(三) 2.4 冒泡排序(四) 3 阅读参考 1 问题描述 引子 排序是数据结构中十分重要的一章,排序算法有很多种,一直没时间整理而且很多排序算法理解的也不是很透彻.希望通过这次整理吃透吧! 排序算法十分多,故分篇进行整理. 说明 本文重点是理解排序算法,而不是完整的程序,所以每节都只有具体排序算法的接口.没有完整的源代码