![8b9adc8e3772081c9060ca46ee340643.png](https://img-blog.csdnimg.cn/img_convert/8b9adc8e3772081c9060ca46ee340643.png)
之前参照《算法导论_原书第3版_CHS》中伪代码,用C语言实现了9大排序算法。并采用文字和图例的形式,描述了各排序算法的实现过程。现分享给大家。代码实现后,未做优化。对于十大排序算法的性能测试,本人当时打算采用100,10000,1000000,100000000个随机数,测得耗用时间,然后在Execl/Origin中生成图表,即可得到算法的性能对比。但这个工作没有进行,有兴趣的人可以自己进行。
9大排序算法包括:
1.插入排序
2.堆排序
3.归并排序
4.基数排序
5.计数排序
6.快速排序
7.冒泡排序
8.随机化快速排序
9.桶排序
以下为插入排序:
![ef156742870722befdbb021c4c8af970.png](https://img-blog.csdnimg.cn/img_convert/ef156742870722befdbb021c4c8af970.png)
![d8a7ca3bb7ea9749dc8a5b11fd83707e.png](https://img-blog.csdnimg.cn/img_convert/d8a7ca3bb7ea9749dc8a5b11fd83707e.png)
![086c85788712e7f69540fa2aece00357.png](https://img-blog.csdnimg.cn/img_convert/086c85788712e7f69540fa2aece00357.png)
![2ce0f513a43c29a52c5e0cd04658bea7.png](https://img-blog.csdnimg.cn/img_convert/2ce0f513a43c29a52c5e0cd04658bea7.png)
![8c71b216f114cc38584fc81a83c4e95f.png](https://img-blog.csdnimg.cn/img_convert/8c71b216f114cc38584fc81a83c4e95f.png)
![e1e82bb730afb8e0cff160aad15e064e.png](https://img-blog.csdnimg.cn/img_convert/e1e82bb730afb8e0cff160aad15e064e.png)
![74cc8127895239409846b5c385fff21b.png](https://img-blog.csdnimg.cn/img_convert/74cc8127895239409846b5c385fff21b.png)
![d89ca96b006edd48cd252c4e7c7ecd7c.png](https://img-blog.csdnimg.cn/img_convert/d89ca96b006edd48cd252c4e7c7ecd7c.png)
二、源代码
#include <stdio.h> /*测试时需要使用printf()*/
#include <stdlib.h> /*动态内存申请时需要调用malloc()*/
#include <time.h> /*产生随机数时需要调用time()*/
#include <math.h> /*求解次方时需调用pow()*/
#include <string.h> /*复制内存元素时需调用memcpy()*/
/****************************************************************
函数名称: InsertSort
输入参数: Array:待排序数组
ArrayLength:数组长度
输出参数: 无
函数功能: 对数组进行升序排列,结果仍保存在该数组中
时间复杂度: c.n.n
注意事项: 例如:数组长度为10,若要对数组进行全部排序,则ArrayLength=10
****************************************************************/
void InsertingSort(int *Array,int ArrayLength) /*插入排序-已测试通过*/
{
int i,j; /*j用于for循环,i为数组辅助下标*/
int temp; /*用于数据交换的临时存储空间*/
for(j=1;j<=ArrayLength;j++) /*遍历所有数组元素,for()内部为核心算法*/
{
temp=Array[j]; /*暂时保存Array[j]的值*/
i=j-1; /*j前面一个元素的下标*/
while(i>=0&&Array[i]>temp) /*若j前面一个元素j-1的值更大,则交换,之后再比较j-1和j-2的值,依次类推,直到i=0*/
{
Array[i+1]=Array[i];
Array[i]=temp;
i=i-1;
}
}
}