C语言实现简单的归并排序算法:
归并排序算法是运用分而治之方法来解决排序问题。
分而治之方法通经常使用下面步骤来进行排序算法:
1.若n为1,算法终止。
2.否则。将这一元素集合切割成两个或很多其它个子集合,对每个子集合分别排序,然后将排好序的子集合归并为一个集合。
我这里是将集合切割成两个子集合。
实例排序图:
核心代码:
void Merge(int arr[], int left, int mid, int right)//将两个子集升序合并
{
int i = left;
int j = mid + 1;
int k = 0;
while( i <= mid && j <= right)
{
if(arr[i] > arr[j])
{
temp[k++] = arr[j++];
}
else
{
temp[k++] = arr[i++];
}
}
while(i <= mid)
{
temp[k++] = arr[i++];
}
while(j <= right)
{
temp[k++] = arr[j++];
}
for( i = 0; i < k; i++)
{
arr[i + left] = temp[i];
}
}
void MergeSort(int arr[], int left, int right)//将集合拆分成两个子集
{
int mid;
if(left < right)
{
mid = (left + right) >> 1;
MergeSort(arr, left, mid);
MergeSort(arr, mid+1, right);
Merge(arr, left, mid, right);
}
}
測试例如以下: