(b))#define maxsize 20typedef int keytype;typedef struct{keytype key;}RedType;typedef struct{RedType r[maxsize+1];int leng" />

数据结构各种常用排序算法综合

  • 格式:doc
  • 大小:46.50 KB
  • 文档页数:5

下载文档原格式

  / 17
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#include"stdio.h"

#define LT(a,b) ((a)<(b))

#define LQ(a,b) ((a)>(b))

#define maxsize 20

typedef int keytype;

typedef struct{

keytype key;

}RedType;

typedef struct{

RedType r[maxsize+1];

int length;

}Sqlist;

//直接插入排序

void insertsort(Sqlist &L){

int i,j;

for(i=2;i<=L.length;++i)

if(LT(L.r[i].key,L.r[i-1].key)){

L.r[0]=L.r[i];

L.r[i]=L.r[i-1];

for(j=i-2;LT(L.r[0].key,L.r[j].key);--j)

L.r[j+1]=L.r[j];

L.r[j+1]=L.r[0];

}//if

}//insertsort

//折半插入排序

void BInsertSort(Sqlist &L)

{

int i,j,low,high,m;

for(i=2;i<=L.length;++i)

{

L.r[0]=L.r[i];

low=1;

high=i-1;

while(low<=high){

m=(low+high)/2;

if(LT(L.r[0].key,L.r[m].key))

high=m-1;

else

low=m+1;

}//while

for(j=i-1;j>=high+1;--j)

L.r[j+1]=L.r[j];

L.r[high+1]=L.r[0];

}//for

}//BInsertSort

//快速排序

int Partition(Sqlist &L,int low,int high){

int pivotkey;

L.r[0]=L.r[low];

pivotkey=L.r[low].key;

while(low

{

while(low=pivotkey)

--high;

L.r[low]=L.r[high];

while(low

++low;

L.r[high]=L.r[low];

}

L.r[low]=L.r[0];

return low;

}//Partition

void QSort(Sqlist &L,int low,int high)

{

int pivotloc;

if(low

{

pivotloc=Partition(L,low,high);

QSort(L,low,pivotloc-1);

QSort(L,pivotloc+1,high);

}

}//QSort

void QuickSort(Sqlist &L)

{

QSort(L,1,L.length);

}//QuickSort

//简单选择排序

int SelectMinKey(Sqlist &L,int m)

{

int i,index=m;

for(i=m;i<=L.length;++i){

if(LT(L.r[i].key,L.r[index].key))

index=i;

}

return index;

}

void SelectSort(Sqlist &L)

{

int i,j,temp;

for(i=1;i<=L.length;++i){

j=SelectMinKey(L,i);

if(i!=j)

{

temp=L.r[i].key;

L.r[i].key=L.r[j].key;

L.r[j].key=temp;

}//if

}//for

}//SelectSort

//堆排序

void HeapAdjust(Sqlist &L,int s,int m)

{

int rc,j;

rc=L.r[s].key;

for(j=2*s;j<=m;j*=2)

{

if(j

if(!LT(rc,L.r[j].key)) break;

L.r[s]=L.r[j];

s=j;

}//for

L.r[s].key=rc;

}//HeapAdjust

void HeapSort(Sqlist &L){

int i,temp;

for(i=L.length/2;i>0;--i)

HeapAdjust(L,i,L.length);

for(i=L.length;i>1;--i){

temp=L.r[1].key;

L.r[1].key=L.r[i].key;

L.r[i].key=temp;

HeapAdjust(L,1,i-1);

}//for

}//HeapSort

//归并排序

void Merge (RedType SR[], RedType TR[], int i, int m, int n) { int j,k;

for (j=m+1, k=i; i<=m && j<=n; ++k) {

if LQ(SR[i].key,SR[j].key) TR[k] = SR[i++];

else TR[k] = SR[j++];

}

if (i<=m)