当前位置导航:炫浪网>>网络学院>>编程开发>>C++教程>>C++进阶与实例

对C++中常用的排序法的研究和分析

    首先介绍一个计算时间差的函数,它在<time.h>头文件中定义,于是我们只需这样定义2个变量,再相减就可以计算时间差了。
函数开头加上
  
    clock_t   start   =   clock();   
    
    函数结尾加上  
 
    clock_t   end   =   clock();   
    
    于是时间差为: end - start

    不过这不精确的   多次运行时间是不同的   和CPU   进程有关吧

    (先总结一下:以下算法以时间和空间以及编码难度,以及实用性方面来看,快速排序法是最优秀的!推荐!但是希尔排序又是最经典的一个,所以建议优先看这2个排序算法)

    排序算法是一种基本并且常用的算法。由于实际工作中处理的数量巨大,所以排序算法对算法本身的速度要求很高。而一般我们所谓的算法的性能主要是指算法的复杂度,一般用O方法来表示。在后面我将给出详细的说明。
 
    对于排序的算法我想先做一点简单的介绍,也是给这篇文章理一个提纲。
 
    我将按照算法的复杂度,从简单到难来分析算法。
 
    第一部分是简单排序算法,后面你将看到他们的共同点是算法复杂度为O(N*N)(因为没有使用word,所以无法打出上标和下标)。 

    第二部分是高级排序算法,复杂度为O(Log2(N))。这里我们只介绍一种算法。另外还有几种算法因为涉及树与堆的概念,所以这里不于讨论。
 
    第三部分类似动脑筋。这里的两种算法并不是最好的(甚至有最慢的),但是算法本身比较奇特,值得参考(编程的角度)。同时也可以让我们从另外的角度来认识这个问题。 

    第四部分是我送给大家的一个餐后的甜点——一个基于模板的通用快速排序。由于是模板函数可以对任何数据类型排序(抱歉,里面使用了一些论坛专家的呢称)。 
   
    现在,让我们开始吧: 
   
    一、简单排序算法
 
    由于程序比较简单,所以没有加什么注释。所有的程序都给出了完整的运行代码,并在我的VC环境下运行通过。因为没有涉及MFC和WINDOWS的内容,所以在BORLAND C++的平台上应该也不会有什么问题的。在代码的后面给出了运行过程示意,希望对理解有帮助。 

    1.冒泡法:
 
    这是最原始,也是众所周知的最慢的算法了。他的名字的由来因为它的工作看来象是冒泡:
 

 #include <iostream.h> 
void BubbleSort(int* pData,int Count) 

  int iTemp; 
  for(int i=1;i<Count;i++) 
  { 
    for(int j=Count-1;j>=i;j--) 
    { 
      if(pData[j]<pData[j-1])  [Page]
      { 
        iTemp = pData[j-1]; 
        pData[j-1] = pData[j]; 
        pData[j] = iTemp; 
      } 
    } 
  } 

void main() 

  int data[] = {10,9,8,7,6,5,4}; 
  BubbleSort(data,7); 
  for (int i=0;i<7;i++) 
    cout<<data[i]<<\" \"; 
  cout<<\"\\n\"; 

 

共7页 首页 上一页 1 2 3 4 5 6 7 下一页 尾页 跳转到
相关内容
赞助商链接