高自由度:c++八大排序算法实现代码和原理

网上有很多八大排序的代码,不过那都比较简约,只是想表明算法原理。当然也有个人的博客写的也是很好的。我写的八大排序算法有以下几个特点:
1、只要改变一个数值,就能实现从小到大或从大到小的排序。
2、改变一个N的值可以随便改变排序数组的元素的多少。
3、排序适合int、long、float、double、char类型的排序,只要改变一个ArrayType的类型就行。
4、八大排序中,有些都是改进的算法。
5、有检查排序正确函数和2个有序数组的归并函数,这些比较常用的。
6、排序函数都有注释原理和每步实现原因。
(若是有对八大排序不懂得,建议看下下面网址关于八大排序具体介绍:(不过我写的排序原理并不完全同于下面网址的,不过有写原理。)
《《《注明:转载请提示出处: http://blog.csdn.net/hguisu/article/details/7776068 》》》
这些改变可能也不是很难,但是可以嵌入使用,以后不用写排序代码,只要自己把头文件包含进去,就可以进行选择哪种排序方式排序了。因为很多改变只要改变头文件,所以自由度和方便都挺高的。下面是我关于排序算法的.h文件:
#ifndef _SORT_H 
#define _SORT_H


//头文件包含 
#include "iostream"
#include "malloc.h"
#include "Queue.h" // 这是我以前写好的队列,在基数排序中要用的队列 


/改这些你想要的数组长度,类型,进制(限基数排序),排序方向//


//数组的元素长度: 在这里改写可以了 
#define N 10 


//基数排序要用到的进制数:可以随便改写,但是前提时输入也要是对应的进制数才行 
#define Dec 10 


// 0表示小于,1表示大于,用于改变排序中的比较,相当于0表示从小到大,1表示从大到小
//(由于基数排序是运用队列,所以不适合改变,只能改函数,当从大到小时,检查排序错误的函数会错误。)
#define B_S 1 


using namespace std;


//数组的类型:可以是char(小心基数排序),int,long,float等等能排序类型(这里的基数排序只适合整型) 
#define ArrayType int 


/


//1、直接插入排序:
extern void InsertSort( ArrayType *array );


//2、希尔排序:
extern void ShellSort( ArrayType *array );


//3、改进的冒泡排序:(这种改进方式时间复杂度是原有的冒泡排序减少2倍以上) 
extern void ImpovedBubbleSort( ArrayType *array );


//4、快速排序:
extern void QuickSort( ArrayType *array, int low, int high ); 


//5、二元选择排序:(选择排序的改进,在VS中有写,这里比一般选择排序间复杂度减少2倍) 
extern void SelectSort( ArrayType *array );


//6、堆排序:
//(1)建立大根堆:
extern void CreateHeep( ArrayType *array, int n );


//(2)堆排序: 
extern void HeepSort( ArrayType *array );


//7、归并排序:
//(1)归并数组:(此归并数组可以归并2个不同有序数组,也可以归并相同有序数组)
extern ArrayType * MergeArray( ArrayType *array1, int low1, int n1, ArrayType *array2, int low2, int n );


//(2)分治法归并排序:
extern void MergeSort( ArrayType * array, int low, int high );


//8、基数排序:
extern void RadixSort( ArrayType * array );


//数组的输出
extern void PrintArray( ArrayType *array, int n ); 


//测试排序正确的函数
extern void TestSort( ArrayType *array );


//改变从小到大,从大到小的函数
extern bool Big_small( ArrayType small, ArrayType big );


#endif

当然福利是福利,这是我了解排序到实现,全自己根据算法原理写下来,在比较、修改、改善、改错慢慢过来的,花费两三天时间才完成(注意的是:基数排序在我的VC++6.0实现没问题,在Dec++是有点问题的花了好长时间,不知道原因,不过猜测是我写队列可能出现了问题,到时你们可以自己写下队列测试下,不过放心能运行,算法没问题的)。

上次几张测试图:



我可能还是个初入茅庐的新手,所以代码中有些不足之处,可以留言给我,当然你们要是有更好的想法,可以进行修改分享。当然有可能我测试不够多,如发现有错误请留言给我,因为我是通过随机数来测试的。谢谢浏览,还望指教。有上传文件,要是下载有问题,可以用下面网址下载


下面是实现文件下载,可以下载压缩包或者根据自己想法一个一个下载:
http://pan.baidu.com/s/1i5nqeRb

装载请注明(创建人:哈哈沃,交流群:580072227)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值