zoukankan      html  css  js  c++  java
  • 简单的排序算法:冒泡排序法

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

    时间复杂度: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     }

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

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

  • 相关阅读:
    html基础起航
    必杀技———SQL基础整理系列(一)
    JavaScript代码段整理笔记系列(一)
    与JSP的初次邂逅……
    产品第二篇
    产品第一篇
    进程在后台可靠运行的几种方法
    Vue.js模板语法
    更靠谱的横竖屏检测方法
    浮动【电梯】或【回到顶部】小插件:iElevator.js
  • 原文地址:https://www.cnblogs.com/Bird-of-Paradise/p/6387457.html
Copyright © 2011-2022 走看看