C 排序算法:归并排序

C 排序算法:归并排序

一、实现

#include

void mergrArr(int *arr,int *tmp,int start,int mid,int end);
void mergeSort(int *arr, int *tmp, int start,int end);
void disArr(int *p,int size);
int main()
{
	int arr[] = { 1,9,8,7,0,2 };
	int tmp[sizeof(arr) / sizeof(*arr)] = {0};
	mergeSort(arr,tmp,0, sizeof(arr) / sizeof(*arr)-1);
	disArr(arr,sizeof(arr)/sizeof(*arr));
	return 0;
}

void mergrArr(int *arr, int *tmp, int start, int mid, int end)
{
	int i = start, j = mid+1, k = start;
	while (i != mid+1&&j != end+1)
	{
		if (arr[i] < arr[j])
			tmp[k++] = arr[i++];
		else
			tmp[k++] = arr[j++];
	}
	if (i == mid+1)
		while (j != end+1) tmp[k++] = arr[j++];
	else
		while (i != mid+1) tmp[k++] = arr[i++];
	while (start <= end)
	{
		arr[start] = tmp[start];
		start++;
	}
}
void mergeSort(int *arr, int *tmp, int start, int end)
{
	if (start < end)
	{
		int mid = (start + end) / 2;
		mergeSort(arr,tmp,start,mid);
		mergeSort(arr, tmp,mid+1,end);
		mergrArr(arr,tmp,start,mid,end);
	}
}
void disArr(int *p,int size)
{
	for (int i = 0; i < size; ++i)
	{
		printf("%-3d", p[i]);
	}
	puts("");
}

C 排序算法:归并排序_第1张图片

二、过程演示

C 排序算法:归并排序_第2张图片

三、算法比较

算法 选择 冒泡 插入 希尔 快速 归并
平均时间复杂度 O ( n 2 ) O(n^2) O(n2) O ( n 2 ) O(n^2) O(n2) O ( n 2 ) O(n^2) O(n2) O ( n 3 2 ) O(n^\frac{3}{2}) O(n23 O ( n l o g n ) O(nlogn) O(nlogn) O ( n l o g n ) O(nlogn) O(nlogn)

你可能感兴趣的:(C)