当前位置: 代码迷 >> 综合 >> 十大简单排序:归并排序
  详细解决方案

十大简单排序:归并排序

热度:35   发布时间:2024-01-20 03:07:27.0

归并排序

思想:先把数组中的元素拆分成两部分,使这两部分都有序,然后再合并这两部分。其中拆分成的两部分,又可以继续拆分成两部分,如此递归下去,直到不能拆分。

void merge(int arr[],int leftptr,int rightptr,int rightBound)
{int mid = rightptr - 1;int i = leftptr;int j = rightptr;int k = 0;int *newArr = new int[rightBount-leftptr+1];while(i<=mid && j<=rightBound){newArr[k++] = arr[i] <= arr[j] ? arr[i++] : arr[j++]; }while(i<=mid)    newArr[k++] = arr[i++];while(j<=rightBound)    newArr[k++] = arr[j++];//将排好序的元素再放回原数组for(int m=0;m<rightBount-leftptr+1;m++){arr[leftptr+m] = newArr[m];}
}void sort(int arr[],int left,int right)
{if(left == right)    return;int mid = left + (right - left)/2;sort(arr,left,mid);sort(arr,mid+1,right);merge(arr,mid+1,right);
}

 

  相关解决方案