您的位置:首页 > 其它

几种常见的排序算法

2014-07-20 23:28 288 查看
这个是我用C语言编写的几种常见的排序算法代码,都是经过我用数据测试的,具体的算法时间复杂度和算法稳定性没有做详细说明,这些网上都可以查到,我就不在此啰嗦了!希望这些算法能给有用的人一点点帮助!

#include

#include

void Swap(int &a,int &b)

{

int c=b;

b=a;

a=c;

}

//冒泡排序

void Sortint1(int num[],int len)

{

for(int i=0;i

for(int j=i;j

{

if(num[i]>num[j+1])

{

Swap(num[i],num[j+1]);

}

}

}

//选择排序

void selectsort(int num[],int len)

{

int min=0;

for(int i=0;i

{

min=i;

for(int j=i+1;j

{

if(num[min]>num[j])

min = j;

}

if(min!=i)

{

Swap(num[i],num[min]);

}

}

}

//直接插入排序

void insertsort(int num[],int len)

{

int temp=0;

for(int i=1;i

{

temp=num[i];

for(int j=i;(j>0) && (num[j-1]>temp);--j)

{

num[j] = num[j-1];

}

num[j]=temp;

}

}

//快速排序

void quicksort(int num[],int len)

{

int i=0,j=len-1;

int val = num[0];

if(len>1)

{

while(i

{

for (;j>i;--j)

{

if(num[j]

{

num[i]=num[j];

break;

}

}

for(;j>i;++i)

{

if(num[i]>val)

{

num[j]=num[i];

break;

}

}

}

num[i]=val;

quicksort(num,i);

quicksort(num+i+1,len-i-1);

}

}

//希尔排序

void shellsort(int num[],int len)

{

int temp=0;

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

{

for(int i=d;i

{

temp = num[i];

for(int j=i-d;(j>=0) && (num[j]>temp);j=j-d)

{

num[j+d]=num[j];

}

num[j+d]=temp;

}

}

}

//二路归并排序

void Merge(int num[],int tag[],int start,int mid,int end)

{

int i=0,j=0,k=start;

for(i=start,j=mid+1;i<=mid && j<=end;k++)

{

if(num[i]<=num[j])

{

tag[k]=num[i++];

}

else

{

tag[k]=num[j++];

}

}

while(i<=mid)

{

tag[k++]=num[i++];

}

while(j<=end)

{

tag[k++]=num[j++];

}

for(int n=start;n<=end;n++)

{

num
=tag
;

}

}

void MergeSort(int num[],int tag[],int start,int end)

{

if(start

{

int mid = (start+end)/2;

MergeSort(num,tag,start,mid);

MergeSort(num,tag,mid+1,end);

Merge(num,tag,start,mid,end);

}

}

//堆排序

void FilterDown(int *&heap,int start,int end)

{

int i = start;

int j = i*2+1;

int temp = heap[i];

while(j<=end)

{

if(j

if(heap[j]<=temp)break;

heap[i]=heap[j];

i=j;

j=2*i+1;

}

heap[i]=temp;

}

void CreapHeap(int *&heap,int len,int ar[])

{

heap = (int *)malloc(sizeof(int)*len);

for(int i=0;i

{

heap[i]=ar[i];

}

int pos=len/2;

while(pos>=0)

{

FilterDown(heap,pos,len-1);

--pos;

}

}

void Compositor(int *&heap,int len)

{

for(int i=len-1;i>0;--i)

{

Swap(heap[0],heap[i]);

int pos=i/2;

while(pos>=0)

{

FilterDown(heap,pos,i-1);

--pos;

}

}

}

int main()

{

int num[]={95,45,15,0,78,84,51,24,12};

int len = sizeof(num)/sizeof(num[0]);

// Sortint1(num,len);

// selectsort(num,len);

// insertsort(num,len);

// quicksort(num,len);

// shellsort(num,len);

int tag[9]={0};

int *heap=NULL;

CreapHeap(heap,len,num);

Compositor(heap,len);

// MergeSort(num,tag,0,len-1);

for(int i=0;i

{

printf("%d ",heap[i]);

}

printf("\n");

free(heap);

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: