zoukankan      html  css  js  c++  java
  • 冒泡的实现及优化

    冒泡排序:

      设数组长为N。以升序为例。

    • 1 比较相邻的2个前后的数据,如果前面数据大于后面的数据,则2个数据交换

    • 2 这样对数组的第0个数据到第N-1个数据进行遍历,则最大的数据会沉到数组的第N-1个位置。

    • 3 N = N-1,如果N != 0 就执行第二步。

    1 void Bubble_Sort( int a[],  int N )
    2 {
    3        int i,  j;
    4        
    5        for( i = 0; i < N;  ++i )
    6              for( j = 1; j < N-i; ++j )
    7                  if( a[j-1] > a[j]  )
    8                        swap( a[j-1], a[j] );      
    9 }

    下面对其进行优化:

          设置一个标志,如果某一趟遍历发生了交换则为true,如果没发生交换则为false。 如果某一趟遍历没发生交换,则表明已经排好序了。

     1 void Bubble_Sort( int a[],  int N )
     2 {
     3        bool flag = true;
     4        int  i;
     5        int  k = n;
     6        while( flag )
     7       {
     8              flag = false;
     9              for(  i = 1;  i < k; ++i )
    10                   if( a[i-1] < a[i] )
    11                   {
    12                         swap( a[i-1], a[i] );
    13                         flag = true;
    14                   }
    15              --k;
    16       }  
    17 }

    再进行进一步优化:

           如果100个数据,前10个无序,后90个有序且都大于前10个数据。那么在第一趟遍历时最后发生交换的位置必定小于10。且这个位置之后的数据必定已经有序了,记录下这个位置,则第二次遍历时从数组头部位置遍历到该位置即可。

     1 void bubble_sort( int* a, int  n )
     2 {
     3     int i;
     4     int flag;
     5     int k;
     6     int temp;
     7     
     8     flag = n;
     9     while( flag > 0 )
    10     {
    11         k = flag;
    12         flag = 0;
    13         for( i = 1; i < k; ++i )
    14         {
    15             if( a[i-1] > a[i] )
    16             {
    17                 temp = a[i-1];
    18                 a[i-1] = a[i];
    19                 a[i] = temp;
    20                 flag = i;
    21             }
    22         }
    23         k = flag;
    24     }
    25     
    26 }
    View Code

           

  • 相关阅读:
    《构建之法》读后感 二
    求数组最大子数组的和(循环数组)
    求数组最大子数组的和
    《构造之法》阅读笔记一
    2019春季学期学习进度报告(一)
    软件工程开课博客
    个人NABCD
    《构建之法》阅读笔记02
    大二下学期学习进度(六)
    《构建之法》阅读笔记01
  • 原文地址:https://www.cnblogs.com/ATMvip/p/3715303.html
Copyright © 2011-2022 走看看