对于c语言排序方法的论文,《c语言排序算法论文》.doc

本文详细分析了C语言中两种经典的排序算法——冒泡法和交换法。冒泡法虽然效率较低,但在特定情况下(如数据完全倒序)会有较多的交换操作。交换法则通过逐个比较并交换元素实现排序,程序结构简洁。讨论了算法的时间复杂度,并以实际例子展示了两种排序方法的性能差异。
摘要由CSDN通过智能技术生成

《c语言排序算法论文》

算法论文

题目名称:《c语言常用排序算法分析》

系部名称:计算机科学与工程

班 级:

学 号:

学生姓名:

指导教师:

2014年4月

c语言常用排序算法分析

摘 要

经过一个学期的算法学习,我对算法产生了浓厚的兴趣,于是就在网上看了下几种经典的算法,对其中的排序算法产生了浓厚的兴趣,下面我就给大家分析一下这些经典的排序算法。

关键词:

关键词1:排序;

关键词2:算法;

关键词3:循环。

正文

一、冒泡法:

这是最原始,也是众所周知的最慢的算法了。他的名字的由来因为它的工作看来象是冒泡,就是把要调换的数字逐渐像冒泡一样浮上来。

代码如下:

#include

void BubbleSort(int* pData,int Count)//排序的函数

{

int iTemp;

for(int i=1;i

{

for(int j=Count-1;j>=i;j--)//内层循环,每个数都和其他数逐渐比较,然后交换

{

if(pData[j]

{

iTemp = pData[j-1];

pData[j-1] = pData[j];

pData[j] = iTemp;

}

}

}

}

int main()

{

int data[] = {8,7,1,6,9,4,5,2,3,};

BubbleSort(data,9);

for (int i=0;i<9;i++)

{

printf("%d",data[i]);

printf("\n");

}

return 0;

}

倒序(最糟情况)

第一轮: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)。乱序时处于中间状态。正是由于这样的原因,我们通常都是通过循环次数来对比算法。

二、交换法

交换法的程序最清晰简单,每次用当前的元素一一的同其后的元素比较并交换。

代码如下:

#include

void ExchangeSort(int* pData,int Count)//交换使用的函数

{

int iTemp;

for(int i=0;i

{

for(int j=i+1;j

{

if(pData[j]

{

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值