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;
}
}
}
此代码采用未排序的数组并使用插入排序对其进行排序。当重复项以未排序的数组排列在一起时,由于多次移位的复杂性提高到O(N^2)
,我试图O(N)
通过确保在重复项排列在一起的情况下没有项目移动超过一次来做到这一点。
但是,当重复项没有排列在一起时,复杂性仍然存在O(N^2)
。O(N)
在这种情况下我们也可以使复杂性变得更复杂吗?