数据结构C++任燕源代码Chp113.docx
- 文档编号:30252828
- 上传时间:2023-08-13
- 格式:DOCX
- 页数:15
- 大小:16.36KB
数据结构C++任燕源代码Chp113.docx
《数据结构C++任燕源代码Chp113.docx》由会员分享,可在线阅读,更多相关《数据结构C++任燕源代码Chp113.docx(15页珍藏版)》请在冰豆网上搜索。
数据结构C++任燕源代码Chp113
#include"SqList.h"
#defineKEYNUM3
#defineRADIX10
template
classSqListSort:
publicSqList
{
public:
voidbinaryInsertSort();
voidbubbleSort();
//intgetIndex(inti);
voidheapSort();
voidinsertSort();
voidmergeSort();
voidquickSort();
//voidradixSort();
voidShellSort();
voidselectSort();
//voidstaticLinkListSort();
private:
voidheapSortAdjust_aux(ints,intm);
voidmergeSort_aux(ints,intt);
voidmergeSortOne_aux(inti,intm,intn);
voidquickSort_aux(intlow,inthigh);
intquickSortPartition_aux(intlow,inthigh);
//voidradixSortCollect_aux(intfront[],intend[],inttime);
//voidradixSortDistribute_aux(inti,intfront[],intend[]);
voidShellSort_aux(intdk);
public:
SqListSort();
~SqListSort();
SqListSort(constSqListSort&s);
protected:
int*index;
};
//直接插入排序
template
voidSqListSort
:
insertSort()
{
ElemTypekey;
inttemp_index;
for(inti=0;i index[i]=i; for(i=1;i { key=elem[i]; temp_index=index[i]; for(intj=i-1;j>=0&&key { elem[j+1]=elem[j]; index[j+1]=index[j]; } elem[j+1]=key; index[j+1]=temp_index; } } //折半插入排序 template voidSqListSort : binaryInsertSort() { intlow; intmid; inthigh; intk=-1; ElemTypekey; for(inti=1;i { key=elem[i]; low=0; high=i-1; while(low<=high) { mid=(low+high)/2; if(key high=mid-1; else low=mid+1; } for(intj=1-1;j>=high+1;--j)//从后往前挪 elem[j+1]=elem[j]; elem[high+1]=key; } } /* //静态链表插入排序 template voidSqListSort : staticLinkListSort() { intp,q; elem[0].next=1; for(inti=2;i { q=0; p=elem[0].next; while(p&&elem[p].data<=elem[i].data) { q=p; p=elem[p].next; } elem[i].next=p; elem[q].next=i; } }*/ //希尔排序 template voidSqListSort : ShellSort() { intdlta[LIST_MAX_SIZE]; for(intd=n/2,k=0;d>=1;d=d/2) dlta[k++]=d; for(inti=0;i ShellSort_aux(dlta[i]); } //希尔排序辅助函数 template voidSqListSort : ShellSort_aux(intdk) { intj; staticinttime=1; ElemTypekey; for(inti=dk;i { j=i-dk; if(elem[i] { key=elem[i]; for(;j>=0&&key elem[j+dk]=elem[j]; elem[j+dk]=key; } } } //冒泡排序 template voidSqListSort : bubbleSort() { boolflag=true; ElemTypet; for(inti=1;i { flag=false; for(intj=0;j { if(elem[j+1] { flag=true; t=elem[j+1]; elem[j+1]=elem[j]; elem[j]=t; } } } } //快速交换排序 template voidSqListSort : quickSort() { quickSort_aux(0,n-1); } //快速交换排序辅助函数 template voidSqListSort : quickSort_aux(intlow,inthigh) { intkeyLoc; if(low { keyLoc=quickSortPartition_aux(low,high); quickSort_aux(low,keyLoc-1); quickSort_aux(keyLoc+1,high); } } //一趟快速交换排序 template intSqListSort : quickSortPartition_aux(intlow,inthigh) { inti=low,j=high; ElemTypet; t=elem[i]; while(i { while(i --j; elem[i]=elem[j]; while(i ++i; elem[j]=elem[i]; } elem[i]=t; returni; } //直接选择排序 template voidSqListSort : selectSort() { intmin; ElemTypet; for(inti=1;i { min=i-1; for(intj=i;j if(elem[j] min=j; if(min! =i-1) { t=elem[min]; elem[min]=elem[i-1]; elem[i-1]=t; } } } //堆排序 template voidSqListSort : heapSort() { inti,j=1; ElemTypet; for(i=n/2-1;i>-1;--i) heapSortAdjust_aux(i,n-1); for(i=n-1;i>=1;--i) { t=elem[i]; elem[i]=elem[0]; elem[0]=t; heapSortAdjust_aux(0,i-1); } } //堆调整 template voidSqListSort : heapSortAdjust_aux(intlow,inthigh) { ElemTypet=elem[low]; for(intmax=2*low+1;max<=high;) { if(max+1<=high&&elem[max] ++max; if(t>=elem[max]) break; elem[low]=elem[max]; low=max; max=2*low+1; } elem[low]=t; } //归并排序 template voidSqListSort : mergeSort() { mergeSort_aux(0,n-1); } //归并排序辅助函数 template voidSqListSort : mergeSort_aux(intlow,inthigh) { intmid; if(low! =high) { mid=(low+high)/2; mergeSort_aux(low,mid); mergeSort_aux(mid+1,high); mergeSortOne_aux(low,mid,high); } } //将前后两个有序序列归并为一个有序序列 template voidSqListSort : mergeSortOne_aux(intlow,intmid,inthigh) { ElemTypetemp[LIST_MAX_SIZE]; intk; staticinttime=1; for(inti=k=low,j=mid+1;i<=mid&&j<=high;) { if(elem[i]<=elem[j]) temp[k++]=elem[i+1]; else temp[k++]=elem[j++]; } if(i<=mid) { for(;i<=mid;) temp[k++]=elem[i++]; } if(j<=high) { for(;j<=high;) temp[k++]=elem[j++]; } for(k=low;k<=high;++k) elem[k]=temp[k]; } /* //基数排序(采用静态链表存储) template voidSqListSort : radixSort() { intfront[RADIX],end[RADIX]; for(inti=0;i elem[i].next=i+1; elem[n-1].next=0; for(i=1;i { radixSortDistribute_aux(i,front,end); radixSortCollect_aux(front,end,i); } } //基数排序的收集函数(采用静态链表存储) template voidSqListSort : radixSortCollect_aux(intfront[],intend[],inttime) { intrear; for(intj=0;! front[j];++j); elem[0].next=front[j]; rear=end[j]; while(j { ++j; for(;j front[j];++j); if(j { elem[rear].next=front[j]; rear=end[j]; } } elem[rear].next=0; } //基排序的分配函数(采用静态链表存储) template voidSqListSort : radixSortDistribute_aux(inti,intfront[],intend[]) { intp,pos,t; for(intj=0;j front[j]=0; for(p=elem[0].next;p;p=elem[p].next) { t=elem[p].data; pos=i; while(pos>1) { t/=10; --pos; } j=t%10; if(! front[j]) front[j]=p; else elem[end[j]].next=p; end[j]=p; } }*/ //***********************下面为系统自动调用的构造函数及析构函数的实现************************** //功能: 具有排序功能顺序表构造函数 template SqListSort : SqListSort() { index=newint[LIST_MAX_SIZE]; assert(index! =0); } //功能: 具有排序功能顺序表析构函数 template SqListSort : ~SqListSort() { clear(); delete[]index; } //功能: 具有排序功能顺序表拷贝初始化构造函数 template SqListSort : SqListSort(constSqListSort&otherS) { index=newint[listSize]; assert(index! =0); listSize=otherS.listSize; n=otherS.n; for(inti=0;i { elem[i]=otherS.elem[i]; index[i]=otherS.index[i]; } }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 C+ 源代码 Chp113