算法分析之冒泡排序

冒泡排序是一个基本的排序算法,基本思路是比较相邻两个数字的大小,根据升序还是降序的需要进行交换,完成一趟后,最大或最小的数字就会被交换到最后一行,因为最后一个数字已经是最大或者最小的数字所以不再进行比较,在进行下一趟的比较,直到所有的数字有序。

代码:

void Bubblesort1(a[],n)

{

int i,j,temp:

for(i=0;i<n;i++)

for(j=1;j<n-i;j++)

if(a[j-1]>a[j])//前面的大于后面的就进行交换,说明是升序排序

{

temp=a[j-1];

a[j-1]=a[j];

a[j]=temp;

}

}

上面是基本的冒泡排序算法,还可以对其进行优化,设置一个标记flag,如果有一趟没有进行交换,说明排序已经完成,改变flag的值

代码:

void Bubblesort2(a[],n)

{

int i,j;

bool flag=true;

while(flag)

{

flag=false;

for(i=1;i<n;i++)

if(a[i-1]>a[i])

{

swap(a[i-1],a[i]);

flag=true;

}

n--;

}

}

上面的优化是对多余的趟数进行优化,还有别的优化方式,比如一行数字后面的数字是有序的,只需要对前面的数字进行排序就好了,可以记录下来第一趟改变的位置,后面的数字是有序的自然不会交换,然后只需要对从开始到该位置的数字进行排序就好了,之后也如此每次记录改变的位置对之前的数字进行排序,知道改变的位置成为第一个数字说明排序已经完成。

代码:

void Bubblesort3(a[],n)

{

int i,f,k;

k=n;

while(k>0)

{

f=k;

k=0;

for(i=1;i<f;i++)

if(a[i-1]>a[i])

{

swap(a[i-1],a[i]);

k=i;

}

}

}

冒泡排序是一种效率低下的算法,数据少时可以使用,数据多的时候最好采用别的排序算法。

参考:http://blog.csdn.net/morewindows/article/details/6657829

时间: 2024-10-10 18:12:13

算法分析之冒泡排序的相关文章

【算法分析】冒泡排序法

今天突然心血来潮了,想开始看算法了,立此博文,开始对算法系列开始完善,争取每周两文.在分析过程中可能想法较笨,希望各位能够宽容和帮助,如果有更好的意见和建议,可随时留言批评.闲话少数,开始正文. 第一次程序 // 通过一次循环将数组中第一个数安排到数组中比它小的数之前 for (int i = 0; i < test.Length - 1; i++) // 此处不能为test.Length,数组溢出.说明从头到尾交换的最大次数 = 数组元素个数 - 1 { if (test[i] < test

《数据结构与算法分析:C语言描述》复习——第六章“排序”——冒泡排序

2014.06.17 01:04 简介: 冒泡排序是O(n^2)级别的交换排序算法,原理简单,属于必知必会的基础算法之一. 思路: 排序要进行N轮,每一轮从尾部逐个向前扫描,遇到逆序对就进行交换.确保每一轮把最小的元素交换到前面去.这个过程好比水中的气泡向上飘,所以叫冒泡排序.代码非常简单,所以语言描述反而显得麻烦了. 实现: 1 // My implementation for bubble sort. 2 #include <iostream> 3 #include <vector&

排序算法分析【四】:冒泡排序(附Python&amp;C++代码)

基本原理 冒泡排序(Bubble Sort,台湾另外一种译名为:泡沫排序)是一种简单的排序算法.它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成.这个算法的名字由来是因为越小的元素会经由交换慢慢"浮"到数列的顶端. 这样说还不是很明白,先看张图: 算法步骤: 1)比较相邻的元素.如果第一个比第二个大,就交换他们两个: 2)对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对.

Java排序算法分析与实现:快排、冒泡排序、选择排序、插入排序、归并排序(二)

一.概述: 上篇博客介绍了常见简单算法:冒泡排序.选择排序和插入排序.本文介绍高级排序算法:快速排序和归并排序.在开始介绍算法之前,首先介绍高级算法所需要的基础知识:划分.递归,并顺带介绍二分查找算法. 二.划分: 划分是快速排序的前提,即把数据分为两组,大于特定值的数据在一组,小于特定值的数据在另一组.快速排序即是由划分和递归操作来完成的. (1)原理: 定义一个阈值,分别从最左面和最右面向中间遍历元素,左面找到一个大于阈值的数据便停止,右边找到一个小于阈值的数据便停止,如果此时左右两边都还没

数据结构1:数据结构和算法分析

问题引出 假设有一道题目:有一组N个数而要确定其中第k个最大者,我们称之为选择问题,那么这个程序如何编写?最直观地,至少有两种思路: 1.将N个数读入一个数组中,再通过某种简单的算法,比如冒泡排序法,以递减顺序将数组排序,则第k个位置上的元素就是我们需要的元素 2.稍微好一些的做法,将k个元素读入数组并以递减顺序排序,接着将接下来的元素再逐个读入,当新元素被读到时,如果它小于数组中的第k个元素则忽略之,否则将其放到数组中正确的位置上,同时将数组中的一个元素挤出数组,当算法终止时,位于第k个位置上

蛮力法-选择排序、冒泡排序

时间总让我有后知后觉的挫感,或许是因为我从不愿记录过往. 3.1.1 选择排序(n个元素,0~n-1,升序,不稳定) 对数组A做i次扫描(0<=i<=n-2),每次从最后n-i个元素中寻找最小元素,然后将它与Ai交换. 代码实现 /** * 选择排序(升序) * @param array 排序的数组 * */ public static void selectSort(int[] array){ for(int i=0;i<array.length-1;i++){ int min=i;

(转载)排序一 冒泡排序

排序一 冒泡排序 目录 要点 算法思想 算法分析 冒泡排序算法的性能 时间复杂度 算法稳定性 优化 完整参考代码 JAVA版本 要点 冒泡排序是一种交换排序. 什么是交换排序呢? 交换排序:两两比较待排序的关键字,并交换不满足次序要求的那对数,直到整个表都满足次序要求为止. 算法思想 它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成. 这个算法的名字由来是因为越小的元素会经由交换慢慢"浮&q

关于算法--蛮力法--冒泡排序

冒泡排序 一.步骤 ①比较列表中的相邻元素,如果它们是逆序的则交换位置,进行下一组,多次比较之后,最大的元素就“沉入”到了列表的最后 ②比较下一轮,直到n-1遍之后,列表顺序完毕 二.JavaScript代码实现 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>BubbleSort</tit

Java冒泡排序和二分查找(预习)

经查阅,将资料整理如下: 一.冒泡排序 1.算法简介 它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成. 这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端,故名. 2.算法原理 (1)比较相邻的元素.如果第一个比第二个大,就交换他们两个. (2)对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对.在这一点,最后的元素应该会是最大的数. (3)针对所有的元素重复以上的