内部排序合集(插入、希尔、起泡、快速、选择、堆、归并和基数排序)
这是我在我们期末的时候写的一些内部排序的例子。因为我们的数据结构考试的范围就限定在内部排序上,所以我没有什么办法,只好对自己埋头苦干就行内部排序的编程了。有些内部排序的例子很是好理解,我们可以通过一些图示来很好地了解到这些排序的过程,但是这些程序的代码可能不是那么好写。而另外一些程序的思想既难以理解,也难于编码。着实地伤透了我的脑筋。下面就将我的程序的主框架代码展示给大家看看。注意,在这里我怎样也不好实现2-路插入排序,因为它这样的排序方法运用在顺序存储结构下不好,在判断数组越界的时候这样的复杂性使我最终放弃了这种方法。要不还不如使用其余的排序呢。
毕竟了解内部排序是一件好事,以后在看一些内部排序的时候也不至于摸不着头脑。最近我看到了一本有关介绍用C++来编辑游戏的书,它就以STL为例,讲解了STL内部实现的机理。
- //头文件
- #include<iostream>
- usingnamespacestd;
- #include"InsertionSort.h"
- #include"Shell'sSort.h"
- #include"QuickSort.h"
- #include"SelectionSort.h"
- #include"MergingSort.h"
- #include"RadixSort.h"
- //定义的宏
- #defineLENGTH10
- //主函数
- intmain(intargc,char**argv)
- {
- //定义一个顺序表
- SqLista;
- intobjArray[LENGTH]={278,109,63,930,589,184,505,269,8,83};
- a.length=LENGTH;
- inti;
- for(i=1;i<a.length+1;i++)//需要将0号位设为监视哨
- {
- a.r[i].key=objArray[i-1];
- a.r[i].otherinfo='/0';
- }
- //直接插入排序
- //InsertSort(a);
- //折半插入排序
- //BInsertSort(a);
- //2-路插入排序
- //BinRouteInsertSort(a,2);//这个算法有问题
- //希尔排序
- /*
- {
- intdlta2[3]={3,2,1};
- ShellSort(a,dlta2,3);
- }
- */
- //起泡排序
- //BubbleSort(a);
- //快速排序
- //QuickSort(a,1,LENGTH);
- //选择排序
- //SelectSort(a);
- //堆排序
- //HeapSort(a);
- //归并排序
- //MergeSort(a);
- //基数排序
- {
- SLListb;
- inti;
- b.keynum=3,b.recnum=LENGTH;//对3位整数进行基数排序
- for(i=1;i<=b.recnum;i++)
- {
- b.r[i].keys[0]=objArray[i-1]%10;//个位
- b.r[i].keys[1]=objArray[i-1]%100/10;//十位
- b.r[i].keys[2]=objArray[i-1]/100;//百位
- }
- RadixSort(b);
- }
- //显示排序后的数组
- for(i=1;i<a.length+1;i++)//需要将0号位设为监视哨
- cout<<a.r[i].key<<'';
- cout<<'/n';
- return0;
- }
要想得到这些排序的具体实现,那么就下载我的代码吧。最近我的积分由于下载一些Boost的资料而变为0了。所以需要的朋友一定要支持一下哦。(使用VS2005开发,算法都是C风格的,可以直接使用。)
我最新的动态:最近在研究DirectInput,希望能够在几天后写一篇技术文章,分享一些我的经验。
本文提供了一系列内部排序算法的实例,包括插入、希尔、起泡、快速、选择、堆、归并和基数排序等,并展示了部分排序过程及代码实现。
1169

被折叠的 条评论
为什么被折叠?



