分支—合并排序法(procedure MERGESORT)
输入:集合S的所有元素A[1],A[2]...A[n]
输出:A[x1]<=A[x2]<=...<=A[xn],它们是S中元素的一个非减排序。这里,x1,x2...xn是1,2...n的某个排列。
方法:过程MERGESORT,这里要调用过程MERGEI。
——————————————————————————————————————————————————————————————————
procedure MERGESORT
integer n;
array:A[1:n] of integer;
procedure SORT(A,i,j);
integer:i,j,m;
array:A[i:j] of integer;
begin
if j-i=1 then
if A[i]>A[j] then
交换A[i]和A[j]
else begin
m=(i+j-1)/2;
SORT(A,i,m);
SORT(A,m+1,j);
MEGREI(A[i:m],A[m+1:j]);
end
end;
begin
read(n,A);
Sort(A,1,n);
write(A);
end
合并两个已排序的序列(procedure MERGEI)
输入:A={a1,a2,...,am}和B={b1,b2,...,bn},其中a1<=a2<=...<=am;b1<=b2<=...<=bn。
输出:序列C={c1,c2,...,cm+n},且有c1<=c2<=...<=cm+n,其中C=A 交 B
方法:过程MERGEI.
——————————————————————————————————————————————————————————————————
procedure MERGEI
begin
i=1;j=1;k=1;
while i<=m和j<=n do
if ai<bj then
begin
ck=ai;
i=i+1;
k=k+1;
end
else
begin
ck=bj;
j=j+1;
k=k+1;
end;
if i>m then
依次将bj,bj+1,...,bn赋值给ck,ck+1,...,cm+n
else
依次将ai,ai+1,...,am赋值给ck,ck+1,...,cm+n
end
——————————————————————————————————————————————————————————————————
Procedure QUICKSORT(S);
if ||S||<=2 then
begin
将S中的元素直接排序;
end
else
begin
从S集合中随机的抽取一个元素a;
把S中的元素分成小于a,等于a和大于a的三个子集S1,S2,S3;
return(QUICKSORT(s1)接着S2接着QUICKSORT(S3))
end
void bubble(int[],int);
void main()
{
int array[]={3,10,6,8,98,22};
int len =sizeof(array)/sizeof(int);//个数
bubble (array,len);
}
void bubble (int a[],int size)
{
int i,temp;
for (int pass=1;pass<size;pass++)
{
for (i=0;i<size-pass;i++)
if (a[i].a[i+1])
{
temp=a[i];
a[i]=a[i+1];
a[i+1]=temp;
}
for (i=0;i<size;i++)
cout <<a[i]<<"";
cout<<endl;
}
}