public void Add(T data) { RefItem <T> item = new RefItem <T>(data); innerList.Add(item); isSorted = false; }
public void Delete(RefItem <T> refItem) { //delete specfic node if (isSorted) { //use binary search to find node //1. find middle point int removeAt = refItem.NodeNumber; for (int i = innerList.Count - 1; i > removeAt; --i) { innerList[i].NodeNumber = i - 1; } innerList.RemoveAt(removeAt); } else { for (int i = innerList.Count - 1; i >= 0; --i) { if (innerList[i] == refItem) { this.innerList.RemoveAt(i); break; } } } //---------------------------------------------- //delete that item }
int BinSearch(RefItem <T> refItem, int begin, int end) { int pos = begin + ((end - begin) / 2); RefItem <T> sample = innerList[pos]; if (refItem == sample) { } else { if (sample.Data.CompareTo(refItem.Data) <= 0) { //search down end = end - ((pos - begin) / 2); if (end == begin) { return(-1); } return(BinSearch(refItem, begin, end)); } else { //search up begin = pos + (end - pos) / 2; if (end == begin) { return(-1); } return(BinSearch(refItem, begin, end)); } } return(-1);//not found }
public void Add(out RefItem <T> refItem, T data) { RefItem <T> item = new RefItem <T>(data); innerList.Add(item); isSorted = false; refItem = item; }
static int MaxFirstSort(RefItem <T> t1, RefItem <T> t2) { return(t2.Data.CompareTo(t1.Data)); }