zoukankan      html  css  js  c++  java
  • C语言排序算法——冒泡排序算法

    冒泡排序是一种交换排序,基本思想是:相邻两两比较,若反序则交换。

    定义交换操作函数:

    1 void swap(int *p, int i, int j)
    2 {
    3     int temp = p[i];
    4     p[i] = p[j];
    5     p[j] = temp;
    6 }

    基本排序算法:

    思想:i=0时,p[i]依次与后面的元素比较,如果后面的元素小,则交换位置,继续比较,直到将最小的元素交换到第一个位置,再从第二个开始与后面的比较。

    缺点:效率低。

     1 void BaseSort0(int *p)
     2 {
     3     int i,j;
     4     for(i=0;i<LEN;i++)
     5     {
     6         for(j=i+1;j<LEN;j++)
     7         {
     8             if(p[i]>p[j])
     9             {
    10                 swap(p,i,j);
    11             }
    12         }
    13     } 
    14 }

    冒泡排序算法:

    相邻两两比较。从序列后面开始向前冒泡,两两比较,反序交换位置。

     1 void BubbleSort1(int *p)
     2 {
     3     int i,j;
     4     for(i=0;i<10;i++)
    5 {
     6
    for(j=9;j>i;j--) 7 { 8 if(p[j]<p[j-1]) 9 { 10 swap(p,j-1,j); 11 } 12 } 13 } 14 }

    优化:

     1 void BubbleSort2(int *p)
     2 {
     3      int i,j;
     4      int flag=1;
     5      for(i=0;i<10&&flag;i++)    //如果没有交换,flag为0,跳出循环
     6      {
     7          flag = 0    //标签初始化
     8          for(j=9;j>i;j--)
     9          {
    10              if(p[j]<p[j-1])
    11              {
    12                  swap(p,j-1,j);
    13                  flag = 1;    //如果发生交换,标签置为1
    14              }
    15          }
    16      }
    17 }

    复杂度:

    最好情况:序列本身是有序的,根据最后优化的代码,比较次数为n-1,没有数据交换,时间复杂度O(n)

    最坏情况:序列本身是逆序的,需要比较1+2+3+...+(n-1)=n(n-1)/2次,并进行等数量级的记录移动,时间复杂度为O(n2)

  • 相关阅读:
    Software Solutions CACHE COHERENCE AND THE MESI PROTOCOL
    CACHE COHERENCE AND THE MESI PROTOCOL
    Multiprocessor Operating System Design Considerations SYMMETRIC MULTIPROCESSORS
    Organization SYMMETRIC MULTIPROCESSORS
    PARALLEL PROCESSING
    1分钟内发送差评邮件
    Secure Digital
    SYMMETRIC MULTIPROCESSORS
    A Taxonomy of Parallel Processor Architectures
    parallelism
  • 原文地址:https://www.cnblogs.com/DaLiNDluDlu/p/5257727.html
Copyright © 2011-2022 走看看