/// <summary> /// 冒泡排序 /// </summary> /// <param name="array">待排序的数组</param> private void bubbleSort(int[] array) { int length = array.Length; for (int i = 0; i < length - 1; i++) //做N-1趟排序 { for (int j = length - 1; j > 0; j--) //从数组尾部往前扫描 { if (array[j] < array[j - 1]) //轻量级数据往前“冒泡” { int temp = array[j]; array[j] = array[j - 1]; array[j - 1] = temp; } } } } /// <summary> /// 二分查找 /// </summary> /// <param name="items">经升序排序后的数组</param> /// <param name="value">要查找的值</param> /// <returns>返回数组的下标(若不存在,则返回-1)</returns> private int binarySearch(int[] items, int value) { //将第一次范围区间初始化为数组头部和尾部 int startIndex = 0; int stopIndex = items.Length - 1; //二分,二分,就是通过先寻找范围区间的中项索引对应的值 int middle = (stopIndex + startIndex) / 2; //注意循环条件控制,缺一不可 while (items[middle] != value && startIndex < stopIndex) { //adjust search area(调整查找范围) if (value < items[middle]) { stopIndex = middle - 1; } else if (value > items[middle]) { startIndex = middle + 1; } //recalculate middle(重新计算中项索引) middle = (stopIndex + startIndex) / 2; } //make sure it's the right value(确保返回正确的值) //若找到,则返回数组的下标;若没找到,则返回-1 return (items[middle] != value) ? -1 : middle; }