您的位置:首页 > 编程语言 > C语言/C++

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

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

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

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

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

都已经在排好序的那一部分里。分析复杂度:在最好情况下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较小时,插入排序。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: