数据结构中常见的8种排序算法的C++代码实现

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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);

相关文档
最新文档