菜鸟,合并排序的c++代码

菜鸟,合并排序的c++代码,第1张

修改后代码

#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))


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/6888714.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-29
下一篇 2023-03-29

发表评论

登录后才能评论

评论列表(0条)

保存