• 简单的排序算法:冒泡排序法


    算法原理:通过不断对比相邻两个元素之间的大小关系,将大的元素向后移动

    时间复杂度:O(n^2)

    c++实现对整形数组排序

    1 void bubbleSort(int arr[],int n)
    2 {
    3     for(int i=1;i<n;i++)
    4         for(int j=1;j<n-i;j++)
    5             if(arr[j-1]>arr[j])
    6                 swap(arr[j-1],arr[j]);
    7     return;
    8 }

    或者,因为每次循环可以得到当前循环最大的元素并放在数组最后,所以可以通过将最后一次交换的位置赋值给数组长度,获得下次循环的限定条件

     1     void bubbleSort(int arr[],int n)
     2     {
     3         bool swapped;
     4         int newn;
     5         
     6         do{
     7             swapped=false;
     8             newn=0;
     9             for(int i=1;i<n;i++)
    10             {
    11                 if(arr[i-1]>arr[i])
    12                 {
    13                     swap(arr[i-1],arr[i]);
    14                     swapped=true;
    15                     newn=i;
    16                 }
    17             }
    18             n=newn;
    19         }while(swapped);
    20         return;
    21     }

    经过简化,将newn赋值简化为n--

     1     void bubbleSort(int arr[],int n)
     2     {
     3         bool swapped;
     4         
     5         do{
     6             swapped=false;
     7             for(int i=1;i<n;i++)
     8             {
     9                 if(arr[i-1]>arr[i])
    10                 {
    11                     swap(arr[i-1],arr[i]);
    12                     swapped=true;
    13                 }
    14             }
    15             n--;
    16         }while(swapped);
    17         return;
    18     }

    三种排序在对随机数排序时,第二种排序时间最长,第三种比第一种时间稍长。

    在对接近有序的数组排序时,越接近有序,第一种变化比较小,第二种和第三种排序速度越快,第二种比第三种变化大,在只有个别元素无序时,第二种最快

  • 相关阅读:
    各大型邮箱smtp服务器及端口收集
    阿里云邮箱POP3、SMTP设置教程
    thinkphp使用PHPMailer发送邮件
    SMTP错误码建议解决方法
    又来杭州了
    外企
    陈志武竞然是date的独立董事
    今天在当当上买了几本书,内有51反利的优惠券,也是一个suprise,
    工作 心态
    中国互联网创业,最好的城市是哪里?
  • 原文地址:https://www.cnblogs.com/Bird-of-Paradise/p/6387457.html
Copyright © 2020-2023  润新知