当前位置:编程学习 > C/C++ >>

C语言——指针。

用指向指针的指针方法实现对10个数排序并输出,要求将排序功能用一个单独的函数来实现。
答案:由于程序比较简单,所以没有加什么注释。所有的程序都给出了完整的运行代码,并在我的VC环境 
下运行通过。因为没有涉及MFC和WINDOWS的内容,所以在BORLAND C++的平台上应该也不会有什么 
问题的。在代码的后面给出了运行过程示意,希望对理解有帮助。 
1.冒泡法: 
这是最原始,也是众所周知的最慢的算法了。他的名字的由来因为它的工作看来象是冒泡: 
#i nclude <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]) 
                            { 
                              iTemp = pData[j-1]; 
                              pData[j-1] = pData[j]; 
                              pData[j] = iTemp; 
                            } 
                } 
       } 
} 

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

倒序(最糟情况) 
第一轮:10,9,8,7->10,9,7,8->10,7,9,8->7,10,9,8(交换3次) 
第二轮:7,10,9,8->7,10,8,9->7,8,10,9(交换2次) 
第一轮:7,8,10,9->7,8,9,10(交换1次) 
循环次数:6次 
交换次数:6次 
其他: 
第一轮:8,10,7,9->8,10,7,9->8,7,10,9->7,8,10,9(交换2次) 
第二轮:7,8,10,9->7,8,10,9->7,8,10,9(交换0次) 
第一轮:7,8,10,9->7,8,9,10(交换1次) 
循环次数:6次 
交换次数:3次 
上面我们给出了程序段,现在我们分析它:这里,影响我们算法性能的主要部分是循环和交换, 显然,次数越多,性能就越差。从上面的程序我们可以看出循环的次数是固定的,为1+2+...+n-1。 写成公式就是1/2*(n-1)*n。 现在注意,我们给出O方法的定义: 
若存在一常量K和起点n0,使当n>=n0时,有f(n)<=K*g(n),则f(n) = O(g(n))。(呵呵,不要说没 学好数学呀,对于编程数学是非常重要的!!!) 

现在我们来看1/2*(n-1)*n,当K=1/2,n0=1,g(n)=n*n时,1/2*(n-1)*n<=1/2*n*n=K*g(n)。所以f(n) =O(g(n))=O(n*n)。所以我们程序循环的复杂度为O(n*n)。 再看交换。从程序后面所跟的表可以看到,两种情况的循环相同,交换不同。其实交换本身同数据源的 有序程度有极大的关系,当数据处于倒序的情况时,交换次数同循环一样(每次循环判断都会交换), 复杂度为O(n*n)。当数据为正序,将不会有交换。复杂度为O(0)。乱序时处于中间状态。正是由于这样的 原因,我们通常都是通过循环次数来对比算法。
其他:哪本C教材都有的,比如谭浩强的第三版,书上找去,两段一拼就行。
是学生就好好读书。 呵呵 搞那么复杂的算法干嘛……

上一个:C语言中F[1<<10]什么意思
下一个:c语言问题 帮忙看看 谢谢了

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,