程序功能:对n(2的整数幂)个数字进行排序。当n大于8时进行归并排序;当n小于等于8时,进行两次插入排序,然后归并到一起。
写这个程序,是做《算法导论》的一道课后题。
归并排序的时间复杂度为O(nlgn),插入排序为O(n*n)。而此方法介于二者中间。
/*=============================================================================
#
# FileName: MergeInsertSort.cpp
# Desc: 结合插入排序和归并排序
#
# Author: yulu
# Email: 187373778@qq.com
#
# Created: 2014-05-01 23:34:00
# Version: 0.0.1
# History:
# 0.0.1 | yulu | 2014-05-01 23:34:00 | initialization
#
=============================================================================*/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define INSERT_SIZE 8
#define SORT_NUM 32
void print_array(int *list,int len);
void merge_array(int *list1,int list1_size,int *list2,int list2_size);
void insertion_sort(int *list,int list_size);
void merge_insert_sort(int *list,int list_size)
{
int flag=0;
if(list_size>INSERT_SIZE || flag==1)
{