144 {
145 int find_number = number;
146 int index_min = 0;
147 int index_max = list.Count() - 1;
148 int target_index = Math.Floor( index_max / 2 );
149
150 if ( index_max == -1 )
151 {
152 list.Insert( number );
153 return 0;
154 }
155
156 while ( true )
157 {
158 int target_value = list[target_index];
159
160 if ( find_number == target_value || ((index_max - index_min) <= 1) )
161 {
162 for ( int i = index_min; i <= index_max; i++ )
163 {
164 if ( find_number <= list[i] )
165 {
166 list.InsertAt( find_number, i );
167 return i;
168 }
169 }
170
171 index_max++;
172 list.InsertAt( find_number, index_max );
173 return target_index;
174 }
175 else if ( find_number < target_value )
176 {
177 index_max = target_index;
178 target_index = Math.Floor( target_index / 2 );
179 }
180 else if ( find_number > target_value )
181 {
182 index_min = target_index;
183 target_index += Math.Floor( (index_max - index_min) / 2 );
184 }
185 }
186
187 return target_index;
188 }