数据结构中常见的8种排序算法的C++代码实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
//整理者:LXZ-2008 百度文库笔名:锡永
//时间:2011/9/29
//学校:CUMT 2012届毕业计算机科学与技术学院计算机科学与技术专业
//内容:数据结构中常见的8种排序算法的C++代码实现
//全是内排序,稳定的排序算法:冒泡,插入,归并,基数
//不稳定的排序算法:希尔,快速,堆,选择
//邮箱:706625262@(仅供交流,不做技术支持)
//备注:我想大家在大二的时候可能已经熟悉这些排序了,但是不知道
// 大四时还能不能快速地写出这些排序算法,这些思想上掌握了,也不见得复杂
// 通过一次失败的机试,让我清楚编程时简洁的重要性,以及重温这些经典排序算法// 以及快速编程的重要性。这次我花了3天重温了这些经典排序算法,
// 并自己根据思想重新写了一下。
//头文件包含及命名空间引用
#include
using namespace std;
//函数声明
void bubble_sort(int n[],int length);//冒泡排序
void selection_sort(int n[],int length);//选择排序
void insertion_sort(int n[],int length);//插入排序
void shell_sort(int n[],int length);//希尔排序
void quick_sort(int n[],int length);//快速排序接口
void quicksort(int n[],int first,int last);//快速排序
void merge_sort(int n[],int length);//归并排序接口
void mergesort(int n[],int first,int last);//归并排序
void Merge(int n[],int first,int middle,int last);//归并排序中的合并
void base_sort(int n[],int length);//基数排序接口
void heap_sort(int n[],int length);//堆排序接口
void buildmaxheap(int n[],int begin,int end);//建立最大堆
void maxheapify(int n[],int begin,int end);//调整最大堆
void Display(int n[],int length,bool state);//输出函数
typedef void ( * SortFuntion) (int n[],int length);//排序函数指针类型
//排序算法函数列表
SortFuntion sortfution[] = {
bubble_sort,//冒泡排序
selection_sort,//选择排序
insertion_sort,//插入排序
shell_sort,//希尔排序
quick_sort,//快速排序
merge_sort,//归并排序
base_sort,//基数排序
heap_sort//堆排序
};
//main funtion
int main(){
int sortS[] = {8,6,2,18,4,3,26,61,72,15};
int sortD[] = {8,6,2,18,4,3,26,61,72,15};
/*
for(int i = 0; i < sizeof(sortfution)/sizeof(SortFuntion); i++){
cout<<"======Begin============"< Display(sortD,sizeof(sortD)/sizeof(int),false); sortfution[i](sortD,sizeof(sortD)/sizeof(int)); Display(sortD,sizeof(sortD)/sizeof(int),true); cout<<"======End============"< memcpy(sortD,sortS,sizeof(sortfution)); } */ Display(sortD,sizeof(sortD)/sizeof(int),false);//输出排序前的序列heap_sort(sortD,sizeof(sortD)/sizeof(int));//排序 Display(sortD,sizeof(sortD)/sizeof(int),true);//输出排序后的序列return 0; } //调整最大堆 void maxheapify(int n[],int begin,int end){ int r(begin); if(2 * begin > end) return; if(n[begin] < n[2*begin]) r = 2*begin; if(2 * begin + 1 <= end && n[r] < n[2 * begin + 1]) r = 2*begin + 1; if(r!=begin){ int temp = n[begin]; n[begin] = n[r]; n[r] = temp; maxheapify(n,r,end); } } //建立最大堆 void buildmaxheap(int n[],int begin,int end){ for(int i = begin; i > 0; i--) maxheapify(n,i,end);