標籤:result 演算法 strong als ati tin static int stat
一:用遞迴演算法
/// <summary> /// /// </summary> /// <param name="num">數組</param> /// <param name="curr">被尋找的數</param> /// <param name="count">需要尋找的索引位置</param> /// <param name="isAfter">true 向前,false 向後</param> /// <returns></returns> public static int change(int[] num, int curr, int count, bool isAfter) { int index = count; if (isAfter) index = Convert.ToInt32(Math.Ceiling(count / 2d)); //判斷索引是否越界 if (index >= num.Length) { return -1; } if (num[index] < curr) //後半部分尋找 { return change(num, curr, index + num.Length, true); } else if (num[index] > curr) //前半部分尋找 { return change(num, curr, index - 1, false); } else if (curr == num[index]) { return index; } return -1; }
二:用while迴圈尋找
/// <summary> /// /// </summary> /// <param name="num">需要尋找的數組</param> /// <param name="curr">尋找的數</param> /// <returns></returns> public static int change2(int[] num, int curr) { int count = num.Length; int index = Convert.ToInt32(Math.Ceiling(count / 2d)); while (true) { //判斷索引是否越界 if (index >= num.Length) { return -1; } if (num[index] < curr) { count = index + num.Length; index = Convert.ToInt32(Math.Ceiling(count / 2d)); continue; } else if (num[index] > curr) { count = index - 1; index = count; continue; } else if (curr == num[index]) { return index; } } }
測試:
int[] num = { 1, 2, 8, 9, 95, 98, 100, 190, 900 };
int results = change(num, 100, num.Length, false);
int resultss = change2(num, 100);
折半演算法,也就是二分尋找法