public TableIndexerSort(Table src, int col) { _entries = new TableIndexEntry[src.Rows]; for (int i = 0; i < src.Rows; i++) { _entries[i] = new TableIndexEntry(src[i, col], i); } Array.Sort<TableIndexEntry>(_entries); }
public TableIndexerSort(Table src, int[] col) { _entries = new TableIndexEntry[src.Rows]; string[] key = new string[col.Length]; for (int i = 0; i < src.Rows; i++) { for (int j = 0; j < col.Length; j++) { key[j] = (string)src[i, col[j]]; } _entries[i] = new TableIndexEntry(new Element(string.Join(",", key)), i); } Array.Sort<TableIndexEntry>(_entries); }
int bsearch2(TableIndexEntry[] entries, Element key, bool upper) { int min = 0; int max = entries.Length - 1; int loc = -1; while (min <= max) { int m = midpoint(min, max); if (entries[m].Value.CompareTo(key) == 0) { loc = m; break; } else if (entries[m].Value.CompareTo(key) < 0) { min = m + 1; } else { max = m - 1; } if ((max - min) == 0) { loc = m; } else if ((max - min) == 1) { if (entries[min].Value.CompareTo(key) == 0) { loc = min; } else if (entries[max].Value.CompareTo(key) == 0) { loc = max; } else { if (!upper) { loc = max; } else { loc = min; } } break; } } if (!upper) { while (loc >= 0 && entries[loc].Value.CompareTo(key) >= 0) { loc = loc - 1; } } else { while (loc < entries.Length && entries[loc].Value.CompareTo(key) <= 0) { loc = loc + 1; } } return loc; }
int bsearch(TableIndexEntry[] entries, Element key) { int min = 0; int max = entries.Length - 1; while (min <= max) { int m = midpoint(min, max); if (entries[m].Value.CompareTo(key) == 0) return m; else if (entries[m].Value.CompareTo(key) < 0) { min = m + 1; } else { max = m - 1; } } return -1; }