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

效率最低的算法。

时间复杂度:
它是最差时间复杂度为: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. 使用Jmeter至WebService压力测试

    使用Jmeter至WebService压力测试   目中我们使用了Jmeter对webservice进行了压力測试,Apache JMeter是Apache组织开发的基于Java的压力測试工具.用于对 ...

  2. js基础语法(一)

    学习网站参考:http://www.w3school.com.cn/ 写入html输出: document.write('test out put'); 例子: http://www.w3school ...

  3. [Android学习笔记]ListView中含有Button导致无法响应onItemClick回调的解决办法

    转自:http://www.cnblogs.com/eyu8874521/archive/2012/10/17/2727882.html 问题描述: 当ListView的Item中的控件只是一些展示类 ...

  4. 慎得慌风 656ik67o

    http://photo.163.com/q/7634581 http://photo.163.com/q/7634580 http://photo.163.com/q/7634577 http:// ...

  5. Uva - 11419 - SAM I AM

    题意:一个矩形——R*C的网格,在某些位置上有石头,在网格外开一炮可以打掉该行或者该列的石头,求打掉这些石头最少需要多少门大炮,位置分别设在哪行哪列(0<R<1001, 0 < C ...

  6. filter与servlet对照

    最近在开java物自,还记得刚开始使用servlet这是一个调试ajax什么时候,然后,我不知道怎么用,你知道写的路径来调用,总是提示404错,,到最后自己一点点的调通了,知道servlet是须要se ...

  7. UVa-Palindromes

    题目地址:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  8. 最简单的视音频播放演示样例5:OpenGL播放RGB/YUV

    ===================================================== 最简单的视音频播放演示样例系列文章列表: 最简单的视音频播放演示样例1:总述 最简单的视音频 ...

  9. 找呀志_通过开源框架引AsyncHttpClient上传文件

    一个.步骤: 1.加入权限(接入网络和可写) 2.获取上传文件的路径和推断是空的 3.如果为空.创建一个异步请求对象 4.创建上传文件路径 5.跑post请求(指定url路径.封装上传參数.新建Asy ...

  10. Linux for周期运行命令注意事项

    假定for有一些符号循环指令,需要使用()封闭. for i in {1..4}; do (python /data/UGCRobot/manage/Scheduler.py 1.log > / ...