几种排序算法的C语言实现

来源:互联网 发布:防火墙软件下载 编辑:程序博客网 时间:2024/05/20 09:24

最近在学习算法导论;前两章讲的是排序的问题,就在博客上一下几个算法的思路和代码,当做是个练习吧。首先写

两个生成数据和打印数据的函数。


<一>插入排序;插入排序的思想很容易理解,就想打牌的时候一样;我们总是从从还没排好序的那一部分里找一个数

,把它插入到已经排好序的那一部分,这样这个数就从未排好序的那部分进入了排好序的那一部分;如此交替,知道每个数

都已经在排好序的那一部分里。分析复杂度:在最好情况下O(n),最坏情况之O(n^2)

代码如下:

<二>选择排序:这个方法来自于第二章练习题:首先找出A中最小元素,与A[0]交换,然后找出A中次小元素,与A[1]交换。。。。

代码如下:最好或最坏情况下都是O(n^2)

<三>合并算法:用分治的方法,把每个序列分成两个序列,再分别对两个序列排序,然后将排好序的子序列合并;合并用到了
了递归(分治)的思想,为了研究复杂度,写出递归式。T(n)=2T(n/2)+O(n); O(n)是将两个排好序的子序列合并时的复杂度;
根据二叉树的启示,我们可以构造一个深度为lgn+1的二叉树,每一次都有cn的操作,总的复杂度为O(nlgn)


<四>合并排序和插入排序;已经发现在一定范围内,nlgn>n^2;所以在先使用合并算法,当
n较小时,插入排序。


0 0
原创粉丝点击