C语言综合实现所有排序方法及效率比较

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

#include

#include

#include

#include

#define N 50000

typedef char elemtype; typedef struct

{

int key;

elemtype otheritem;

}recdtype,*Recdtype;

recdtype R[N];

//直接插入排序

void InsertSort(Recdtype R,int n) {

int i,j;

for(i=2;i<=n;i++)

{

R[0]=R[i];

j=i-1;

while(R[0].key

{

R[j+1]=R[i];

j--;

}

R[j+1]=R[0];

}

}/*InsertSort*/

//折半查找

void BinSort(recdtype R[],int n) {int i,j,low,high,m;

for(i=2;i<=n;i++)

{R[0]=R[i];

low=1;

high=i-1;

while(low<=high)

{m=(low+high)/2;

if(R[0].key

high=m-1;

else

low=m+1;}

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

R[j+1]=R[j];

R[high+1]=R[0];

}

}/*BinSort*/

//希尔排序

void ShellSort(recdtype R[],int n)

{

int i,j;

for(int d=N/2;d>=1;d=d/2)

{

for(i=1+d;i<=n;i++)

{

R[0]=R[i];

j=i-d;

while(j>0&&R[0].key

{

R[j+d]=R[j];

j=j-d;

}

R[j+d]=R[0];

}

}

}/*ShellSort*/

//冒泡排序

void BubbleSort(recdtype R[],int n)

{

int lastExchange;

recdtype temp;

for(int i=0;i

{

lastExchange=1;

for(int j=n-1;j>=i;j--)

{

if(R[j+1].key

{

temp=R[i+1];

R[i+1]=R[i];

R[i]=temp;

lastExchange=0;

}

if(lastExchange)

break;

}

}

}/*BubbleSort*/

//快速排序

int Partition(recdtype R[],int l,int h)//一次划分算法{

int i=l;

int j=h;

R[0]=R[i];

int x=R[i].key ;

while(i

{

while(i=x)j--;

R[i]=R[j];

while(i

R[j]=R[i];

}

R[i]=R[0];

return i;

}

void QuickSort(recdtype R[],int s,int t)//快速排序{

int k;

if(s

{

k=Partition(R,s,t);

QuickSort(R,s,k-1);

QuickSort(R,k+1,t);

}

}

//直接选择排序

void SelectSort(recdtype R[],int n)

{

int i,j,k;

for(i=1;i

{

k=i;

for(j=i+1;j<=n;j++)

if(R[j].key

k=j;

if(i!=k)

{

R[0]=R[i];

R[i]=R[k];

R[k]=R[0];

}

}

}/*SlectSort*/

//堆排序

void Shift(recdtype R[],int i,int m)

{

int j;

R[0]=R[i];

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

{

if(j

j++;

if(R[0].key

{

R[i]=R[j];

i=j;

}

else

break;

}

R[i]=R[0];

}/*Shift*/

void HeapSort(recdtype R[],int n)

{

recdtype temp;

int i;

for(i=n/2;i>0;i--)

Shift(R,i,n);

for(i=n;i>1;i--)

{

temp=R[1];

R[1]=R[i];

R[i]=temp;

Shift(R,1,i-1);

}

}/*HeapSort*/

//二路归并算法

void Merge(recdtype R[],int low,int middle,int high) {

int h,i,j,k;

recdtype R1[N+1];

h=low;

i=low;

j=middle+1;

while(h<=middle&&j<=high)

{

相关文档
最新文档