zoukankan      html  css  js  c++  java
  • 排序算法

    一、冒泡排序

    1、原理:两两比较,将较大或者较小的数据上浮,实现升序或者降序。

    2、实现代码

     1 #include<stdio.h>
     2 #define    Up      1
     3 #define   Down     0
     4 #define DIM(a) (sizeof(a)/sizeof(*a))
     5 void Sort(int* p, unsigned int Array_Long, int Up_Or_Down)
     6 {
     7     int i,j;
     8     int temp;
     9     for(i=0;i<Array_Long-1;i++)
    10     {
    11         for(j=0;j<Array_Long-i-1;j++)
    12         if(Up_Or_Down==Up)
    13         {
    14             if(*(p+j)>=*(p+j+1) )
    15             {
    16                 temp=*(p+j);
    17                 *(p+j)=*(p+j+1);
    18                 *(p+j+1)=temp;     
    19             }
    20         }
    21         else if(Up_Or_Down==Down)
    22         {
    23             if(*(p+j)<=*(p+j+1) )
    24             {
    25                 temp=*(p+j);
    26                 *(p+j)=*(p+j+1);
    27                 *(p+j+1)=temp;     
    28             }
    29         }
    30     }
    31 }
    32 void main()
    33 {
    34     int i;
    35     int a[]={1,3,5,7,2,4,6,8,10,9,13,11,12};
    36     for(i=0;i<DIM(a);i++)
    37     printf("%d ",a[i]);
    38     printf("
    ");
    39     
    40     Sort(a,DIM(a),Up);
    41       
    42     for(i=0;i<DIM(a);i++)
    43     printf("%d ",a[i]);
    44     printf("
    ");
    45     
    46     Sort(a,DIM(a),Down);
    47     
    48     for(i=0;i<DIM(a);i++)
    49     printf("%d ",a[i]);
    50     printf("
    ");
    51 }

    3、算法分析

      时间复杂度分析

      最好的情况下是正序,一趟扫描即可完成排序,所需的比较次数和移动次数分别为: ,  。所以,冒泡排序最好的时间复杂度为  。

      最坏的情况下是反序,需要进行n-1趟排序,所需的比较次数和移动次数分别为:

    冒泡排序的最坏时间复杂度为
      
      综上,因此冒泡排序总的平均时间复杂度为  。

     
  • 相关阅读:
    抽象
    数据处理—异常值处理
    数据处理—数据连续属性离散化
    数据处理—缺失值处理
    数据处理—归一化
    数据特征—正态性检验
    数据特征—相关性分析
    数据分析—统计分析
    数据特征—帕累托分析
    特征分析—对比分析
  • 原文地址:https://www.cnblogs.com/Pual623548198/p/7347729.html
Copyright © 2011-2022 走看看