gpt4 book ai didi

c++ - 使用归并排序计算比较

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:55:59 25 4
gpt4 key购买 nike

现在我正在学习算法,我被鼓励回顾所有不同的排序方法,以找出每种方法需要多少次比较才能对数字数组进行排序。我需要在这个有效的合并排序程序中实现一个计数,但我对它需要去的地方有点迷茫。如果有人能指出我正确的方向,我将不胜感激。

//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 更改为返回比较次数它们并递归计数。

关于c++ - 使用归并排序计算比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36879963/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com