1. 合并排序
合并排序采用分治法将两个或者两个以上的有序序列合并成一个新的有序表,也称归并排序。
分治法:把一个问题分解成与原问题相似的子问题,一一解决每个子问题。
源码:
#include <stdio.h>
//合并
void Merge(int source[],int tem[], int left, int mid, int right)
{
int i = left, j=mid+1, k =left;
while(i!=mid+1 && j!=right+1)
{
if(source[i] >= source[j])
tem[k++] = source[j++];
else
tem[k++] = source[i++];
}
while(i != mid+1)
tem[k++] = source[i++];
while(j != right+1)
tem[k++] = source[j++];
for(i=left; i<=right; i++)
source[i] = tem[i];
}
//递归
void MergeSort(int source[], int tem[], int left, int right)
{
int mid;
if(left < right)
{
mid= (left + right) / 2;
MergeSort(source, tem, left, mid);
MergeSort(source, tem, mid+1, right);
Merge(source, tem, left, mid, right);
}
}
int main()
{
int a[8] = {10, 4, 6, 3, 8, 2, 5, 7};
int i, b[8];
MergeSort(a, b, 0, 7);
for(i=0; i<8; i++)
printf("%d ", a[i]);
printf("\n");
return 0;
}