Java 使用插入排序对具有重复项的数组进行排序 package.com.sort; 公共类ArraySel{ 私人长[]a; 内勒姆私人酒店; 公共阵列塞尔(整数最大值) { a=新长[最大值]; nElems=0; } 公共空白插入(最大长度) { a[nElems]=最大值; nElems++; } 公共空间显示() { 对于(int j=0;j=temp) { 如果(a[in]==a[in-1]) { flag++; 在--; } 其他的 { a[in]=a[in-1]; 在--; } } a[in]=温度; } } }
这段代码接受未排序的数组,并使用插入排序对其进行排序。Java 使用插入排序对具有重复项的数组进行排序 package.com.sort; 公共类ArraySel{ 私人长[]a; 内勒姆私人酒店; 公共阵列塞尔(整数最大值) { a=新长[最大值]; nElems=0; } 公共空白插入(最大长度) { a[nElems]=最大值; nElems++; } 公共空间显示() { 对于(int j=0;j=temp) { 如果(a[in]==a[in-1]) { flag++; 在--; } 其他的 { a[in]=a[in-1]; 在--; } } a[in]=温度; } } },java,sorting,insertion-sort,code-complexity,Java,Sorting,Insertion Sort,Code Complexity,这段代码接受未排序的数组,并使用插入排序对其进行排序。 当重复项以未排序的数组排列在一起时,由于多次移位,复杂性会上升到O(N^2),我试图通过确保在重复项排列在一起的情况下,没有项目移动超过一次,从而使其成为O(N) 但是,当重复项没有排列在一起时,复杂性仍然存在O(N^2)。 在这种情况下,我们是否也可以将复杂性设为O(N)?复杂性不是由移动的次数决定的,而是由整体操作的次数决定的,在这种情况下,比较也是如此 插入排序是O(n^2)平均复杂度,你不能让它比这快。只有在最佳情况下,当输入字符串
当重复项以未排序的数组排列在一起时,由于多次移位,复杂性会上升到
O(N^2)
,我试图通过确保在重复项排列在一起的情况下,没有项目移动超过一次,从而使其成为O(N)
但是,当重复项没有排列在一起时,复杂性仍然存在O(N^2)
。
在这种情况下,我们是否也可以将复杂性设为O(N)?复杂性不是由移动的次数决定的,而是由整体操作的次数决定的,在这种情况下,比较也是如此
插入排序是O(n^2)平均复杂度,你不能让它比这快。只有在最佳情况下,当输入字符串已被排序()时,In才能在O(n)中工作。如果没有关于底层数据的进一步信息,使用排序算法可以实现的最佳结果是
O(n log n)
(n是元素数)
排序算法,如插入排序、冒泡排序、选择排序等,由于其双循环,都具有时间复杂度O(n²)
。事实上,当获得一个已经排序的元素列表时,它们有时会工作得更好。例如,对于完全排序的列表,时间复杂度为O(n)
您无法改变这些算法固有的时间复杂性。在传入列表中查找预排序区域时,您唯一能做的就是缩短算法。“当重复项在未排序的数组中排列在一起时,由于多次移位,复杂性提高到O(N2),我尝试通过确保在重复项排列在一起时,没有项目移动超过一次,使其成为O(N)。”-如果未对输入数组中的元素进行排序,则复杂性仍将为O(n^2),无论重复项是否紧随其后。。示例-5,2,2,1,6仍然具有O(n^2)的复杂性。如果我不是,则插入排序时间复杂性始终为O(n^2)wrong@Kartik_Koro-如果对输入数组进行排序,那么插入排序的最佳情况复杂性将变为O(n)@TheLostMind我知道,但我们谈论的是大O符号,即右上界?@Kartik_Koro yes。。排序数组的时间复杂度为O(n)。这意味着对于排序数组,时间不能超过(someConstant*n)。我们仍在设定上限。
package com.sort;
public class ArraySel {
private Long[] a;
private int nElems;
public ArraySel(int max)
{
a = new Long[max];
nElems = 0;
}
public void insert(long max)
{
a[nElems] = max;
nElems++;
}
public void display()
{
for(int j = 0; j < nElems; j++)
{
System.out.print(a[j]+ " ");
}
System.out.println();
}
public void insertionSort()
{
int in , out, flag = 0;
long temp;
for(out = 1; out < nElems; out++)
{
temp = a[out];
in = out;
while(in > 0 && a[in - 1] >= temp )
{
if(a[in] == a[in - 1 ])
{
flag++;
in--;
}
else
{
a[in] = a[in-1];
in--;
}
}
a[in] = temp;
}
}
}