C (++)内部排序汇总(快速排序&冒泡排序&堆排序&选择排序&插入排序&归并排序)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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 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++;