自行了解原理,我这里提供可以运行的c语言代码。代码注释比较详细,了解递归和归并排序原理的话稍微琢磨还是能看懂的。
先上主要实现代码,然后上可以运行的完整代码。编译器是G++,如果是GCC编译器,这一条三目运算符汇报错
while(i<=mid && j<=right) //将较小的首元素放进temp数组
arr[i]<arr[j]?temp[k++]=arr[i++]:temp[k++]=arr[j++];
如果报错改成if-else判断就行了。具体原因我也不知道为啥
while(i<=mid && j<=right)
if(arr[i]<arr[j])
temp[k++]=arr[i++];
else
temp[k++]=arr[j++];
主要实现代码:
//将两个有序数组合并
void merge(int* arr,int* temp,int left,int mid,int right)
{
int i=left;//i标记左数组下标
int j=mid+1;//j标记右数组下标
int k=left;//标记临时数组下标
while(i<=mid && j<=right) //将较小的首元素放进temp数组
arr[i]<ar