zoukankan      html  css  js  c++  java
  • 冒泡排序算法 C++和PHP达到

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

    效率最低的算法。

    时间复杂度:
    它是最差时间复杂度为: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++编程开发学习的50条建议(转)
    编程思想:我现在是这样编程的(转)
    Linux系统编程@多线程与多进程GDB调试
    字符串分割函数 STRTOK & STRTOK_R (转)
    C语言指针与数组的定义与声明易错分析
    C语言 a和&a的区别
    C语言二重指针与malloc
    【C语言入门】C语言的组成结构(基础完整篇)!
    程序员吐槽女友败家:开酒店必须400元起步,工资却不到自己的一半!
    怎样才能和编程语言对上眼?你需要做些准备以及...
  • 原文地址:https://www.cnblogs.com/blfshiye/p/4852290.html
Copyright © 2011-2022 走看看