冒泡排序是小元素向前或向后的大要素。两个相邻元件之间的比较结果更。交换也这两个元件之间发生。它是最慢的排序算法。

效率最低的算法。

时间复杂度:
它是最差时间复杂度为:O(n^2),冒泡排序最好的时间复杂度为:O(n^2)。平均时间复杂度为:O(n^2)
算法原理:
    1. 比較相邻的元素。假设第一个比第二个大。就交换他们两个。
    2. 对每一对相邻元素作相同的工作,从開始第一对到结尾的最后一对。

在这一点,最后的元素应该会是最大的数。

    3. 针对全部的元素反复以上的步骤,除了最后一个。
    4. 持续每次对越来越少的元素反复上面的步骤,直到没有不论什么一对数字须要比較
算法稳定性:
冒 泡排序就是把小的元素往前调或者把大的元素往后调。比較是相邻的两个元素比較,交换也发生在这两个元素之间。

所以。假设两个元素相等,我想你是不会再无聊 地把他们俩交换一下的。假设两个相等的元素没有相邻,那么即使通过前面的两两交换把两个相邻起来,这时候也不会交换,所以同样元素的前后顺序并没有改变, 所以冒泡排序是一种稳定排序算法。


php代码:
<?php
$n = 8;
$min = 1;
$max = 100;
$data = createData($n, $min, $max);
echo "随机生成数组:";
print_r($data);
echo "<br />";
bubble_sort($data, $n); //生成一个随机数组成的不反复数组
function createData($n, $min, $max){
$bigarr = range($min, $max);
$arrkey = array_rand($bigarr, $n); //返回键名
for($i=0; $i<count($arrkey); $i++){
$arr[] = $bigarr[$arrkey[$i]];
}
return $arr;
} //冒泡排序函数
function bubble_sort($data, $n)
{
$flag = 0;
for($i=0; $i<$n-1; $i++){
for($j=0; $j<$n-$i-1; $j++){
if($data[$j+1] < $data[$j]){
$flag = 1;
$temp = $data[$j];
$data[$j] = $data[$j+1];
$data[$j+1] = $temp;
}
}
if (!$flag){
break;
}
$flag = 0;
echo "排序过程 ".($i+1)." 步:";
print_r($data);
echo "<br/>";
}
echo "排序后的结果:";
print_r($data);
}
?>
执行结果:


c++代码:
#include<iostream>
#include<stdlib.h>
#include<time.h>
using namespace std;
int createData(int arr[], int n, int min, int max);
void bubble_sort(int *a, int n);
int main()
{
int arr[100];
int n=6;
int min=2;
int max=12;
createData(arr, n, min, max);
for (int i=0; i<n; i++)
cout << arr[i] << " ";
cout << endl;
bubble_sort(arr, n);
for (int j=0; j<n; j++)
cout << arr[j] << " ";
cout << endl;
return 1;
}
//生成一个随机数组成的不反复数组
int createData(int arr[], int n, int min, int max)
{
srand(time(NULL));
int i,j,flag;
for(i=0; i<n; i++){
do{
int num = min + rand()%(max-min+1);
arr[i] = num;
flag = 0;
for(j=0; j<i; j++){
if( arr[i] == arr[j])
flag = 1;
}
}while(flag);
}
return 1;
}
//冒泡排序函数
void bubble_sort(int *a, int n)
{
bool flag = true;
int k = n;
while(flag)
{
flag = false;
for(int i=1; i<k; i++)
{
if(a[i-1] > a[i])
{
int tmp = a[i];
a[i] = a[i-1];
a[i-1] = tmp;
flag = true;
}
}
k--;
}
}
执行结果:

版权声明:本文博主原创文章。博客,未经同意不得转载。

冒泡排序算法 C++和PHP达到的更多相关文章

  1. C#冒泡排序算法

    用了两种形式的数据,一个是泛型List,一个是数据int[].记录一下,作为自己学习过程中的笔记. using System; using System.Collections.Generic; us ...

  2. c#-冒泡排序-算法

    冒泡排序(Bubble Sort) 冒泡排序算法的运作如下: 1.比较相邻的元素.如果第一个比第二个大,就交换他们两个. 2.对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对.在这一点,最后 ...

  3. java冒泡排序算法

    /** * 冒泡排序算法:每次 * @author shaobn * @description 每次都会确定一个最大的值 即固定了,所以会每次-i; */ public class Test1 { p ...

  4. 快速、冒泡排序算法(PHP版)

    1.冒泡排序算法改进: 方法一: function bubbleSort($arr){//$arr(1...n)是待排序的文件,采用自下向上扫描,对$arr做冒泡排序 $bFlag = true; / ...

  5. 冒泡排序算法(C#实现)

    简单的冒泡排序算法,代码如下: ] = temp; hasExchangeAction =true; //发生过互换 } } if (!hasExchangeAction) //如果没有发生过互换,则 ...

  6. 数据结构之------C++指针冒泡排序算法

    C++通过指针实现一位数组的冒泡排序算法. 冒泡排序 冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法. 代码: /* Name:冒泡排序算法 Copyright:Null ...

  7. PHP实现冒泡排序、双向冒泡排序算法

    冒泡排序(Bubble Sort),是一种较简单的.稳定的排序算法.冒泡排序算法步骤:比较相邻的元素,如果第一个比第二个大,就交换他们两个的位置:对每对相邻的元素执行同样的操作,这样一趟下来,最后的元 ...

  8. java:高速排序算法与冒泡排序算法

     Java:高速排序算法与冒泡算法 首先看下,冒泡排序算法与高速排序算法的效率: 例如以下的是main方法: /**   *  * @Description:  * @author:cuiyaon ...

  9. 【C语言】两种方式实现冒泡排序算法

    题目要求 编写一个C语言程序,实现基本的冒泡排序算法. 算法 冒泡排序,用一句话来总结: 一组数中,相邻的两个数进行比较.交换,将最大(小)数交换至尾(首)部,即完成了一次冒泡排序 要想对N个数字进行 ...

  10. php中的冒泡排序算法

    <?php //php中的冒泡排序算法 //从大到小的排序方式 ,$arr[$j]>$arr[$j+1](这里换成了从小到大的排序方式) $arr=array(); $arr=array( ...

随机推荐

  1. navicat for mysql 如何将表ID排序重1开始?

    如果是自增字段,删除数据,他是根据原来的继续往后排的 1.你可以删除这个字段,重新建立个自增字段就可以了 2.好像也可以重新设置排序起始 alter table table_name AUTO_INC ...

  2. 如何获取ul 中li选中的值点击button按钮跳转链接

    <ul id="parent"> <li></li> <li></li> <li></li> & ...

  3. 【菜鸟看框架】——EF怎样自己主动生成实体

    引言 在上一篇博客中给大家介绍了一些关于EF框架的基本知识.让大家对实体架构算是有了一个入门的认识,当然知识 这一篇博客是不能非常清楚的理解实体架构的内涵的.我们须要在实践中自己去不断的研究和探索当中 ...

  4. java学习笔记05--字符串 .

    java学习笔记05--字符串 . 一.String类 由字符所组成的一串文字符号被称之为字符串.在java中字符串不仅仅是字符数组,而且是String类的一个实例,可以使用String类来构建. 字 ...

  5. Android真机网络adb联机调试初探

    新项目是一个基于android4.2设备.刚拿到demo板时就对联机互调感兴趣了.处于以前在S3c2440上对linux的移植使用经验.心里猜测对于android设备应该也这样.所以通过搜索资料整理如 ...

  6. Matlab图像彩色转灰色

    Matlab图像彩色转灰色 时间:2014年5月7日星期三 网上找的程序.实现图像彩色转灰色: I1=imread('C:\Users\Yano\Desktop\matlab\test1\4.jpg' ...

  7. Java提高篇(三二)-----List总结

    前面LZ已经充分介绍了有关于List接口的大部分知识,如ArrayList.LinkedList.Vector.Stack,通过这几个知识点能够对List接口有了比較深的了解了.仅仅有通过归纳总结的知 ...

  8. [华为机试练习题]50.求M的N次方的最后三位

    题目 描写叙述: 正整数M 的N次方有可能是一个很大的数字,我们仅仅求该数字的最后三位 例1: 比方输入5和3 ,5的3次方为125.则输出为125 例2: 比方输入2和10 2的10次方为1024 ...

  9. Jetty:配置连接器

    连接器配置概览 连接器用于接收网络连接,配置一个连接器须要配置:  1)连接器的网络參数(比如:port):  2)连接器使用的服务(比如:executors,schedulers).  3)为接收连 ...

  10. zoj3329(概率dp)

    题目连接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=3754 题意:有三个骰子,分别有k1,k2,k3个面. 每次掷骰子,如 ...