次の形式の重複を含む配列があります。
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)
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);
}