- 归并排序基本思想:
首先将待排序数列两两分组,将排序好的两个序列归并到中间数组中,依次类推,直到归并完整个待排序数列。 - C++实现:
void Print(int a[],int n,int i=0)
{
cout<<"排序后的结果为:"<<endl;
for(int i=0;i<n;i++)
cout<<a[i]<<" ";
cout<<endl;
}
void Merge(int *a,int *rf,int i,int m,int n)
{
int k=i,j=m+1;
while(i<=m && j<=n)
{
if(a[i]<=a[j])
rf[k++]=a[i++];
else
rf[k++]=a[j++];
}
while(i<=m) rf[k++]=a[i++];
while(j<=n) rf[k++]=a[j++];
Print(rf,n+1);
}
void MergeSort(int *a,int *rf,int n)
{
int *q=a;
int len=1;
int *temp;
while(len<n)
{
int i=0;
int s=len;
len=2*s;
while(i+len<n)
{
Merge(q,rf,i,i+s-1,i+len-1);
i=i+len;
}
if(i+s<=n)
Merge(q,rf,i,i+s-1,n-1);
temp=q;q=rf;rf=temp;
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
3.Python实现:
'''输出排序结果函数'''
def Print(ddata):
n=len(ddata)
for i in range(n):
print ddata[i],
'''归并排序'''
def Merge(data,rf,i,m,n):
j=m+1;k=i
'''将两待归并数组中的较小元素依次赋给rf'''
while(i<=m and j<=n):
if data[i]<=data[j]:
rf[k]=int(data[i])
i+=1;k+=1
else:
rf[k] =int(data[j])
j+=1;k+=1
'''将两归并数组中的剩余元素赋给rf'''
while(i<=m):
rf[k] = int(data[i])
i+=1;k+=1
while(j<=n):
rf[k] = int(data[j])
j+=1;k+=1
def MergeSort(data,n):
rf=zeros(n)
len=1
while(len<n):
i=0
s=len
len=2*s
'''对两两成对的数组归并'''
while(i+len<n):
Merge(data,rf,i,i+s-1,i+len-1)
i=i+len
'''对单出的数组归并'''
if(i+s<=n):
Merge(data,rf,i,i+s-1,n-1)
data,rf=rf,data
print '排序结果为:'
Print(data)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40