gpt4 book ai didi

java - 使用合并排序与选择排序的比较

转载 作者:行者123 更新时间:2023-11-29 05:59:18 24 4
gpt4 key购买 nike

我有一个 10 int 的数组,使用选择排序我计算出对整个数组进行排序大约需要 45 次比较,但我不确定使用合并排序需要多少次根据我的计算需要 12 次比较....我在这里是对还是错?

提前致谢

这是合并方法

static void merge(int[] first, int[] second, int[] a)
{
int iFirst = 0;
int iSecond = 0;
int i = 0;
//moving the smaller element into a
while(iFirst < first.length && iSecond < second.length)
{
if(first[iFirst] < second[iSecond])
{
a[i] = first[iFirst];
iFirst++;
}
else
{
a[i] = second[iSecond];
iSecond++;
}
i++;
}
counter += i;

//copying the remaning of the first array
while(iFirst < first.length)
{
a[i] = first[iFirst];
iFirst++; i++;
}
//copying the remaining of second array
while(iSecond < second.length)
{
a[i] = second[iSecond];
iSecond++; i++;
}
}

最佳答案

要将 n 元素数组与 m 元素数组合并,在最坏的情况下需要进行 n+m-1 比较(最好是 min{m,n})。

因此,当您将 10 元素数组分成两半时,顶层合并需要多达 9 次比较。两个 5 元素的一半需要最多 4 次比较,使得 9 + 2*4 = 17。将 5 元素分成 2 元素部分和 3 元素部分需要多达 1 + 3 次比较,因此最坏的情况总共是 25 次比较(9 + 2*4 + 2*3 + 2*1)。

                10(9)                             9
/ \
/ \
/ \
/ \
/ \
/ \
/ \
5(4) 5(4) 8
/ \ / \
/ \ / \
3(2) 2(1) 3(2) 2(1) 6
/ \ / \ / \ / \
2(1) 1 1 1 2(1) 1 1 1 2
/ \ / \
1 1 1 1

关于java - 使用合并排序与选择排序的比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10769749/

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