C (++)内部排序汇总(快速排序&冒泡排序&堆排序&选择排序&插入排序&归并排序)

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

#include

#include

#include

#include

#define M 30001

random(int a[30001])

{

int i;

for(i=1;i<30001;i++)

a[i]=rand()%30001;

}//随机生成30000个数函数

int change1(char a[81])

{

int b=0,n,i;

for(i=0;a[i]!=0;i++);

n=i-1;

for(;i>1;i--)

b+=((int)pow(10,n+1-i))*(a[i-1]-48);

if(a[0]=='-')

b=b*(-1);

else

b+=((int)pow(10,n))*(a[0]-48);

return b;

}//字符转化成整型

insort(int a[30001])

{

int i,j,temp,temp1,n;

int count=0;

n=30001;

for(i=1;i

{

temp=a[i];//

for(j=i-1;j>=0;j--)/* 每次循环完毕数组的0到i-1项为一个有序的序列*/

{

count=0;/*这里count是标记位,可以减少比较次数*/

if(a[j]>temp)

{

temp1=a[j+1];

a[j+1]=a[j];

a[j]=temp1;

count++;

}//满足条件,前移

if(count==0)

break;//位置恰当,退出

}

}

}//insort插入排序函数

selsort(int a[30001])

{

int i,j,temp;

for(i=1;i<30000;i++)

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

if(a[i]>a[j])

{

temp=a[j];

a[j]=a[i];

a[i]=temp;

}

}//选择排序

bubsort(int a[30001])

{

int i,j,temp;

for(i=1;i<30001;i++)

for(j=30000;j>i;j--)

{

if(a[j-1]>a[j])

{

temp=a[j-1];

a[j-1]=a[j];

a[j]=temp;

}

}

}//冒泡排序

int partition(int a[30001],int low,int high)

{

int pr;

a[0]=a[low];

pr=a[low];

while(low

{

while(low=pr) --high;

a[low]=a[high];

while(low

a[high]=a[low];

}

a[low]=a[0];

return low;

}//partion

qsort(int a[30001],int low,int high) {

int pr;

if(low

{

pr=partition(a,low,high);

qsort(a,low,pr-1);

qsort(a,pr+1,high);

}

}//qsort

quicksort(int a[30001])

{//快速排序

qsort(a,1,30000);

}//quicksort

void heapadjust(int a[M],int s,int m) {//建立堆函数

int rc,j;

rc=a[s];

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

if(j

++j;

if(rc>=a[j])

break;

a[s]=a[j];

s=j;

}

a[s]=rc;

}//heapadjust建立堆函数

void heapsort(int a[30001])

{

int i,temp;

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

heapadjust(a,i,M);//建初始大顶堆

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

{

temp=a[i];

a[i]=a[1];

a[1]=temp;//交换,把最后一个记录和堆顶记录交换,最值移到最后heapadjust(a,1,i-1);//建立顶堆

}

}//heapadjust堆排序

merge(int array[],int p,int q,int r)

{

int i,k=0,begin1=p,end1=q,begin2=q+1,end2=r,*temp;

temp=(int *)malloc((r-p+1)*sizeof(int));

while((begin1<=end1)&&(begin2<=end2)){

if(array[begin1]

{

temp[k] = array[begin1]; begin1++;

}

else

{

temp[k] = array[begin2]; begin2++;

}

k++;

相关文档
最新文档