1 24 25 package com.mckoi.util; 26 27 import java.util.Arrays ; 28 29 38 39 public final class SortUtil { 40 41 45 public static void quickSort(Comparable [] list, int min, int max) { 46 Arrays.sort(list, min, max + 1); 47 48 } 82 83 87 public static void quickSort(Comparable [] obs) { 88 quickSort(obs, 0, obs.length - 1); 89 } 90 91 92 97 public static int sortedIndexOf(Comparable [] list, Comparable val, int lower, int higher) { 98 99 if (lower >= higher) { 100 if (val.compareTo(list[lower]) > 0) { 101 return lower + 1; 102 } 103 else { 104 return lower; 105 } 106 } 107 108 int mid = (lower + higher) / 2; 109 Comparable mid_val = list[mid]; 110 111 if (val.equals(mid_val)) { 112 return mid; 113 } 114 else if (val.compareTo(mid_val) < 0) { 115 return sortedIndexOf(list, val, lower, mid - 1); 116 } 117 else { 118 return sortedIndexOf(list, val, mid + 1, higher); 119 } 120 121 } 122 123 136 public static SearchResults sortedQuickFind(Comparable [] list, Comparable val, SearchResults results) { 137 if (list.length == 0) { 138 return null; 139 } 140 141 int size = list.length - 1; 142 int count = 0; 143 144 int i = sortedIndexOf(list, val, 0, size); 145 if (i > size) { 146 return null; 147 } 148 int temp_i = i; 149 150 while (temp_i >= 0 && list[temp_i].equals(val)) { 151 ++count; 152 --temp_i; 153 } 154 int start_index = temp_i + 1; 155 temp_i = i + 1; 156 while (temp_i <= size && list[temp_i].equals(val)) { 157 ++count; 158 ++temp_i; 159 } 160 161 if (count == 0) { 162 return null; 163 } 164 else { 165 if (results == null) { 166 results = new SearchResults(); 167 } 168 results.found_index = start_index; 169 results.found_count = count; 170 } 171 172 return results; 173 } 174 175 } 176 | Popular Tags |