使用合并排序计数比较

缺口

现在,我正在学习算法,并被鼓励回顾所有不同的排序方法,以找出每种类型对一组数字进行排序需要进行多少次比较。我需要在可以工作的“合并排序”程序中实现一个计数,但是就需要去的地方我有点迷茫了。如果有人能指出正确的方向,我将非常感激。

//MergeSort.h

#include <iostream>
using namespace std;
void merge_sort(int A[], int low, int high);
void merge(int A[], int low, int mid, int high);

void merge_sort(int A[], int low, int high)
{
   int mid;
   if(low<high)
   {
      mid=(low+high)/2;
      merge_sort(A,low,mid);
      merge_sort(A,mid+1,high);
      merge(A,low,mid,high);

   }
}

void merge(int A[], int low, int mid, int high)
{
    int h, i, j, B[100], k;
    h = low;
    i = low;
    j = mid + 1;

    while ((h <= mid) && (j <= high))
    {
        if (A[h] <= A[j])
        {
            B[i] = A[h];
            h++;
        }
        else
        {
            B[i] = A[j];
            j++;
        }
        i++;
    }

    if (h > mid)
    {
        for (k = j;k <= high;k++)
        {
            B[i] = A[k];
            i++;
        }
    }
    else
    {
        for (k = h;k <= mid;k++)
        {
            B[i] = A[k];
            i++;
        }
    }

    for (k = low;k <= high;k++)
    {
        A[k] = B[k];
    }
}

//MergeSort.cpp

#include <iostream>
using namespace std;

#include "MergeSort.h"
#include <ctime>

int main() 
{
    int A[1000], n = 100, i;
    srand(time(NULL));

    cout << "Here are " << n << " random numbers: \n";
    for (i = 0; i < n; i++)
    {
        A[i] = rand() % 100;
        cout << " " << A[i];
    }

    merge_sort(A, 0, n-1);

    cout << "\n\nThe sorted array is: ";
    for (int i=0;i<n;i++)
        cout << A[i] <<" ";

    cout<<endl<<endl;
    system("pause");
}
蒲公英

计算比较次数的一种简单方法是将您的mergemerge-sort函数从更改void为返回其中的比较次数,然后进行递归计数。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

合并排序的计数比较

来自分类Dev

合并排序比较

来自分类Dev

合并排序比较

来自分类Dev

数组中的反转计数数。使用合并排序

来自分类Dev

使用合并排序计数反转-意外结果

来自分类Dev

数组中的反转计数数。使用合并排序

来自分类Dev

合并排序算法-计数反转

来自分类Dev

使用比较器或合并排序,对对象的arrayList进行排序哪个更好?

来自分类Dev

使用合并排序排序(名称)

来自分类Dev

合并时合并排序使用什么排序技术

来自分类Dev

合并排序变体:使用链接数组

来自分类Dev

使用递归合并排序算法

来自分类Dev

使用向量合并排序(int)C ++

来自分类Dev

C ++使用迭代器合并排序

来自分类Dev

使用合并排序的反转次数

来自分类Dev

使用合并排序计算反转次数

来自分类Dev

使用合并排序,Swift计算倒数

来自分类Dev

合并排序与JS中的用户输入比较

来自分类Dev

(TypeError:无法解压缩不可迭代的int对象)使用合并排序的反转计数器

来自分类Dev

分而治之:合并排序

来自分类Dev

合并排序

来自分类Dev

合并排序算法

来自分类Dev

合并排序对

来自分类Dev

在合并排序C ++中使用合并时的随机值

来自分类Dev

是否可以使用合并排序对堆栈进行排序?

来自分类Dev

使用合并排序对结构数组进行排序

来自分类Dev

使用合并排序对数组进行排序

来自分类Dev

合并排序与选择排序

来自分类Dev

使用JS Underscore对相似数组进行key合并排序