I wanted to have a sorted list, with the ability to have items duplicate, built in sorted collections doesn’t allow duplicate values, so I used a List, and for effeciancy, I maintained the items sorted in it while insertion, instead of calling the sort method with each insertion
To insert in the list sorted, I used the binary search method, to find the first item less then or equal to the inserted item
Suppose we have a sorted list “list”, and we want to insert item i keeping it sorted
To insert in the list sorted, I used the binary search method, to find the first item less then or equal to the inserted item
Suppose we have a sorted list “list”, and we want to insert item i keeping it sorted
List<int> list= new List<int>();
int index = list.BinarySearch(i);
if (index < 0)
list.Insert(~index, i);
else
list.Insert(index, i);
Another way of having sorted list with duplicates is to use a normal sorted list and a custom comparer
public class DuplicateKeyComparer<TKey>:IComparer<TKey> where TKey : IComparable
{
public int Compare(TKey x, TKey y)
{
int result = x.CompareTo(y);
if (result == 0)
return 1; // Handle equality as being greater
return result;
}
}
Only draw back of this method is that we can't find elements or remove, we can only iterate over them, as using the above comparer would always return 1 and won't match any elements.
No comments:
Post a Comment