排序算法之冒泡排序 C++和PHP实现

php中文网
发布: 2016-06-23 13:44:52
原创
1082人浏览过

冒泡排序就是把小的元素往前调或者把大的元素往后调。比较是相邻的两个元素比较,交换也发生在这两个元素之间。是 最慢的排序算法。在实际运用中它是效率最低的算法。

时间复杂度:

它是最差时间复杂度为: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++速学教程(入门到精通)
c++速学教程(入门到精通)

c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号