插入排序:
#include <iostream>
using namespace std;
int main()
{
intNum=50;
inti,j,key;
int*A=newint[Num];
for(j=0;j<Num;j++)
A[j]=rand()0;
for(j=1;j<Num;j++)
{
key=A[j];
i=j-1;
while(i>-1&&A[i]>key)
{
A[i+1]=A[i];
i=i-1;
}
A[i+1]=key;
}
for(j=0;j<Num;j++)
cout<<A[j]<<"\t";
delete[] A;
return0;
}
合并排序:
#include<iostream>
using namespace std;
bool merge(int *A,int p,int q,int r)
{
intn1=q-p+1;
intn2=r-q;
int*L=newint[n1];
int*R=newint[n2];
inti,j,k;
for(i=0;i<n1;i++)
L[i]=A[p+i];
for(i=0;i<n2;i++)
R[i]=A[q+i+1];
i=0;j=0; //注意此处的要均为,注意和算法的区别!
for(k=p;k<r+1;k++)
{
if(i==n1) //当数组L已排完后则将R数组直接复制到A数组
{
A[k]=R[j++];
continue;
}
if(j==n2) //当数组R已排完后则将L数组直接复制到A数组
{
A[k]=L[i++];
continue;
}
if(L[i]<=R[j])
{
A[k]=L[i];
i++;
}
else
{
A[k]=R[j];
j++;
}
}
returntrue;
}
bool merge_sort(int *A,int p,int r)
{
intq;
if(p<r)
{
q=(p+r)/2;
merge_sort(A,p,q);
merge_sort(A,q+1,r);
merge(A,p,q,r);
}
returntrue;
}
int main()
{
intNum=50;
inti;
int*A=newint[Num];
for(i=0;i<Num;i++)
A[i]=rand()0;
merge_sort(A,0,Num-1);
for(i=0;i<Num;i++)
cout<<A[i]<<"\t";
return0;
}