修改后代码
#include<iostream>#include<iomanip>
using namespace std
void merge(int A[], int p, int q, int r)
{
int len1=q-p+1
int len2=r-q
int *L=new int[len1+1]
int *R=new int[len2+1]
for (int i=0i<len1i++)
{
L[i]=A[p+i]
}
for (int j=0j<len2j++)
{
R[j]=A[q+1+j]
}
L[len1]=R[len2]=INT_MAX
int i=0,j=0
for (int k=pk<=rk++)
{
if (L[i]<R[j])
{
A[k]=L[i]
i++
}
else
{
A[k]=R[j]
j++
}
}
}
void mergeSort(int A[], int p, int r)
{
if (p<r)
{
int q
q=(r+p)/2
mergeSort(A,p,q)
mergeSort(A,q+1,r)
merge(A,p,q,r)
}
}
int main()
{
cout<<"This is merge sort!"<<endl
cout<<endl
int n
cout<<"How many numbers to sort: "
cin>>n
int *a=new int[n]
cout<<"Please input "<<n<<"nonnegative numbers:"
for (int i=0 i<ni++)
{
cin>>a[i]
}
mergeSort(a,0,n-1)
for(int j=0j<nj++)
{
cout<<setw(7)<<a[j]
}
cout<<endl
return 0
}
q=(r+p)/2你写成减了
functional_merge($arrA,$arrB){
$arrC = array()
while(count($arrA) &&count($arrB)){
//这里不断的判断哪个值小,就将小的值给到arrC,但是到最后肯定要剩下几个值,
//不是剩下arrA里面的就是剩下arrB里面的而且这几个有序的值,肯定比arrC里面所有的值都大所以使用
$arrC[] = $arrA['0'] <$arrB['0'] ? array_shift($arrA) : array_shift($arrB)
}
returnarray_merge($arrC, $arrA, $arrB)
}
//归并排序主程序
functional_merge_sort($arr){
$len=count($arr)
if($len <= 1)
return $arr//递归结束条件,到达这步的时候,数组就只剩下一个元素了,也就是分离了数组
$mid = intval($len/2)//取数组中间
$left_arr = array_slice($arr, 0, $mid)//拆分数组0-mid这部分给左边left_arr
$right_arr = array_slice($arr, $mid)//拆分数组mid-末尾这部分给右边right_arr
$left_arr = al_merge_sort($left_arr)//左边拆分完后开始递归合并往上走
$right_arr = al_merge_sort($right_arr)//右边拆分完毕开始递归往上走
$arr=al_merge($left_arr, $right_arr)//合并两个数组,继续递归
return $arr
}
$arr = array(12, 5, 4, 7, 8, 3, 4, 2, 6, 4, 9)
print_r(al_merge_sort($arr))
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)