归并排序

来源:互联网 发布:用c语言控制九九乘法表 编辑:程序博客网 时间:2024/06/10 03:36

十一种排序算法

//算法逻辑:1. 将列表分为n个子列表,每一个列表只包含一个元素 2. 反复地归并子列表成一个新的有序列表,直到只剩下一个子列表
Best:nlogn Average:nlogn Worst:nlogn Memory:n worst case Stable:Yes
// 归并排序中的合并算法

void Merge(int array[], int start, int mid, int end){//把两部分数据按大小合并    int temp1[10], temp2[10];    int n1, n2;    n1 = mid - start + 1;    n2 = end - mid;    // 拷贝前半部分数组    for (int i = 0; i < n1; i++)    {        temp1[i] = array[start + i];    }    // 拷贝后半部分数组    for (int i = 0; i < n2; i++)    {        temp2[i] = array[mid + i + 1];    }    // 把后面的元素设置的很大    temp1[n1] = temp2[n2] = 1000;    // 逐个扫描两部分数组然后放到相应的位置去    for (int k = start, i = 0, j = 0; k <= end; k++)    {        //合并两数组temp1和temp2,按顺序大小放到原数据组中,因此需要额外的空间        if (temp1[i] <= temp2[j])        {            array[k] = temp1[i];            i++;        }        else        {            array[k] = temp2[j];            j++;        }    }}// 归并排序void MergeSort(int array[], int start, int end){    if (start < end)    {               int i;        i = (end + start) / 2;        // 对前半部分进行排序        MergeSort(array, start, i);        // 对后半部分进行排序        MergeSort(array, i + 1, end);        // 合并前后两部分        Merge(array, start, i, end);    }}
原创粉丝点击