• 冒泡排序


    首先排序分为四种: 

          交换排序: 包括冒泡排序,快速排序。

          选择排序: 包括直接选择排序,堆排序。

          插入排序: 包括直接插入排序,希尔排序。

          合并排序: 合并排序。

    冒泡排序:

    首先我们自己来设计一下“冒泡排序”,这种排序很现实的例子就是:

    我抓一把沙仍进水里,那么沙子会立马沉入水底, 沙子上的灰尘会因为惯性暂时沉入水底,但是又会立马像气泡一样浮出水面,最后也就真相大白咯。

     关于冒泡的思想,我不会说那么官方的理论,也不会贴那些文字上来,我的思想就是看图说话。

    那么我们就上图.

               

    要达到冒泡的效果,我们就要把一组数字竖起来看,大家想想,如何冒泡?如何来体会重的沉底,轻的上浮?

     第一步:  我们拿40跟20比,发现40是老大,不用交换。

    第二步:  然后向前推一步,就是拿20跟30比,发现30是老大,就要交换了。

    第三步:拿交换后的20跟10比,发现自己是老大,不用交换。

    第四步:拿10跟50交换,发现50是老大,进行交换。

     最后,我们经过一次遍历,把数组中最小的数字送上去了,看看,我们向目标又迈进了一步。

     实现 C++程序:

     1 #include<iostream>
     2 #include <ctime>  //使用了time() 函数 
     3 #include <cstdlib>    //使用了srand()函数 
     4 
     5 const int N=20005;
     6 int a[N];
     7 using namespace std;
     8 //冒泡排序算法
     9         void bubblesort(int *a, int n)
    10         {
    11             int temp;
    12             //第一层循环: 表明要比较的次数,比如n个数,肯定要比较n-1次
    13             for (int i = 1; i < n; i++)
    14             {
    15                 //j>i: 从后往前的的下标一定大于从前往后的下标,否则就超越了。
    16                 for (int j = n; j > i; j--)
    17                 {
    18                     //如果前面一个数大于后面一个数则交换
    19                     if (a[j - 1] > a[j])
    20                     {
    21                         temp = a[j - 1];
    22                         a[j - 1] = a[j];
    23                         a[j] = temp;
    24                     }
    25                 }
    26             }
    27         }
    28                  
    29 
    30 int main()
    31 {
    32     //随机产生n个数存入数组a中 
    33     int n=17000;
    34     srand(int(time(0)));      //利用时间函数time(),产生每次不同的随机数种子
    35     for(int i=1;i<=n;i++) a[i]=rand();  //随机产生3000个数存于数组a中 (从1开始) 
    36     clock_t start = clock();
    37     bubblesort(a,n);                   //对数组a进行排序(从1开始) 
    38     clock_t end = clock();
    39     for(int i=1;i<=20;i++) cout<<a[i]<<' ';    //输出前20个数据(已从小到大排序) 
    40     cout<<endl<<"冒泡排序耗时为:"<<end-start<<"ms"<<endl; 
    41     return 0;
    42 }

             经我亲测在1秒中之内,可排序的数据为17000个,原因为冒泡的时间复杂度为O(n2),因此只能排17000个数据,要想排序次数超过万级,就必须更换成新的排序方法。

  • 相关阅读:
    钉钉h5二次分享
    几种 JavaScript 动画库推荐
    Vue监听浏览器窗口大小发生变化触发的事件
    git将本地项目关联远程仓库并上传到新分支
    初识Node.js与内置模块
    Ajax
    关于linux环境下解 npm install卡在checking installable status(这一篇就够了)
    解决使用element-ui的el-table组件显示树形数据时,多选框全选无法选中全部节点问题
    视频防盗链是如何实现的?
    g2 plot柱状图的简单使用
  • 原文地址:https://www.cnblogs.com/jjzzx/p/5065052.html
Copyright © 2020-2023  润新知