Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 插入排序中比较和交换之间的差异_Algorithm_Sorting - Fatal编程技术网

Algorithm 插入排序中比较和交换之间的差异

Algorithm 插入排序中比较和交换之间的差异,algorithm,sorting,Algorithm,Sorting,下面给出了应用于数组a(基于零的索引)的插入排序算法的伪代码。 def比较(a、b): 如果a>b,则返回1 否则返回-1 for i : 1 to length(A) j = i - 1 while j > 0 if compare(A[j-1], A[j]) > 0 swap(A[j], A[j-1]) j = j - 1 else break 给

下面给出了应用于数组a(基于零的索引)的插入排序算法的伪代码。 def比较(a、b): 如果a>b,则返回1 否则返回-1

    for i : 1 to length(A)
    j = i - 1
    while j > 0
           if compare(A[j-1], A[j]) > 0
                swap(A[j], A[j-1])
                j = j - 1
           else break
给定一个整数数组A,当应用于A时,通过上述算法查找比较函数调用数和交换函数调用数之间的差异

让我们以A={1,2,4,3}为例。如果我们对一个函数应用上面的插入排序,我们将按以下顺序调用比较和交换函数的序列

compare (A[0], A[1])
compare (A[1], A[2])
compare (A[2], A[3])
swap       (A[2], A[3])
compare (A[1], A[2])
这里比较函数调用4次,交换函数调用1次。答案是4-1=3


我需要在不运行实际插入排序算法的情况下以最佳方式找到差异,该算法需要O(n^2)。

循环时将一个计数器置于
循环中,在
if
条件下将另一个计数器置于
循环中。

这两个的减法将给出答案。

对于每个
i
2
length(A)
比较
调用的数量将比
交换
调用的数量多一个,除了当前元素在
1
i
(在这种情况下,当
j
变为
0
时,我们退出循环)。答案将是
length(A)-1-最小出现次数

minElement = A[1] // one-based array
result = length(A) - 1
for i = 2 to length(A)
    if A[i] < minElement 
        minElement = A[i]
        result = result - 1
minElement=A[1]//基于一个的数组
结果=长度(A)-1
对于i=2到长度(A)
如果A[i]
问题的最后一行是关于这一点,为了更具体,引用是
我需要在不运行实际插入排序算法的情况下,以最佳方式找到差异,该算法需要O(n^2).
@DAle我现在读了,但我个人认为,如果我们将复杂性降低到这一点以下,它将不会保持插入排序。它可以称为其他排序技术then@Sandeep,但他不需要同时对元素进行排序all@IvayloStrandjev在这种情况下,我们可以从最后插入的元素进行插入比较,并从piv向前或向后移动ot取决于结果,数字是否大于或小于枢轴。“以最佳方式找到差异”???