我有一个包含以下格式的重复项的数组:
arr[]={ 2,9,1,5,1,4,9,7,2,1,4 }
我想对数组进行排序,以便所有重复的元素都移到最后并在不同的子数组中排序,如下所示:
arr[]={ 1,2,4,5,7,9, 1,2,4,9, 1 }
指定数组的整数没有范围。以下是我尝试过的代码。此代码递归地对子数组进行排序,然后将重复项移到最后。但在复杂性方面,这不是最佳解决方案。
请建议它是否可以在O(n)
or中解决O(nlogn)
。整个代码如下:
public static int sortDuplicates(int a[],int start,int end){
int i, k,temp;
if(start==end)
return 1;
Arrays.sort(a, start, end);
k = start;
for (i = start+1; i < end; i++) {
if (a[k] != a[i] && a[k]<a[i])
{
temp=a[k+1];
a[k+1] = a[i];
a[i]=temp;
k++;
}
}
return sortDuplicates(a,k+1,a.length);
}