예제 #1
0
 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);
 }
예제 #2
0
 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);
 }
예제 #3
0
        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;
        }
예제 #4
0
 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;
 }