public void FibonacciSearchTest() { FibonacciSearch <int> fibonacciSearch = new FibonacciSearch <int>(); for (int i = 0; i < 100; i++) { FillRandom(); this.Items.Sort(); fibonacciSearch.Items.Clear(); fibonacciSearch.Items.AddRange(this.Items); if (this.Items.IndexOf(this.SearchItem) != -1 && fibonacciSearch.ToFind(this.SearchItem) != -1) { Assert.AreEqual(this.Items[this.Items.IndexOf(this.SearchItem)], this.Items[fibonacciSearch.ToFind(this.SearchItem)]); } else if (fibonacciSearch.ToFind(this.SearchItem) == -1 && this.Items.IndexOf(this.SearchItem) != -1) { Assert.IsTrue(false); } else if (fibonacciSearch.ToFind(this.SearchItem) != -1 && this.Items.IndexOf(this.SearchItem) == -1) { Assert.IsTrue(false); } else if (fibonacciSearch.ToFind(this.SearchItem) != -1 && this.Items.IndexOf(this.SearchItem) != -1) { Assert.IsTrue(true); } } }
public void GetSmallestFibonacciBiggerThanNumber() { Assert.AreEqual(1, FibonacciSearch.GetSmallestFibonacciBiggerThanNumber(0).FibN); Assert.AreEqual(144, FibonacciSearch.GetSmallestFibonacciBiggerThanNumber(143).FibN); Assert.AreEqual(13, FibonacciSearch.GetSmallestFibonacciBiggerThanNumber(10).FibN); Assert.AreEqual(13, FibonacciSearch.GetSmallestFibonacciBiggerThanNumber(12).FibN); Assert.AreEqual(8, FibonacciSearch.GetSmallestFibonacciBiggerThanNumber(12).FibN1); Assert.AreEqual(5, FibonacciSearch.GetSmallestFibonacciBiggerThanNumber(12).FibN2); }
public static void Main(string[] args) { var elements = Console.ReadLine() .Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries) .Select(int.Parse) .ToArray(); var targetElement = int.Parse(Console.ReadLine()); Console.WriteLine(FibonacciSearch <int> .Search(elements, targetElement, elements.Length)); }
public void TestMethod1() { var nodes = new List <Node> { new Node(1), new Node(21), new Node(13), new Node(91), new Node(100), new Node(81), new Node(42), new Node(12), new Node(11), new Node(211), new Node(113), new Node(911), new Node(10), new Node(811), new Node(412), new Node(2), new Node(83), new Node(43), new Node(23), new Node(131), new Node(231), new Node(133), new Node(913), new Node(1003), new Node(81330), new Node(4233), new Node(233), new Node(1033) }; var fibonacciSearch = new FibonacciSearch(nodes); var testValueTrue = new Node(42); var testValueFalse = new Node(111); var testValueLastPosition = new Node(81330); var resultTrue = fibonacciSearch.Search(testValueTrue); var resultFalse = fibonacciSearch.Search(testValueFalse); var resultLastPosition = fibonacciSearch.Search(testValueLastPosition); Assert.IsTrue(resultTrue); Assert.IsFalse(resultFalse); Assert.IsTrue(resultLastPosition); }
static void Main(string[] args) { int[] arr_bs = { 7, 26, 53, 22, 32, 28, 38, 23, 24, 54, 27, 78, 33 }; BubbleSort bs = new BubbleSort(); Console.WriteLine("冒泡排序:"); bs.MyBulleSort(arr_bs); /*result * 7 26 22 32 28 38 23 24 53 27 54 33 78 * 7 22 26 28 32 23 24 38 27 53 33 54 78 * 7 22 26 28 23 24 32 27 38 33 53 54 78 * 7 22 26 23 24 28 27 32 33 38 53 54 78 * 7 22 23 24 26 27 28 32 33 38 53 54 78 * 7 22 23 24 26 27 28 32 33 38 53 54 78 * 7 22 23 24 26 27 28 32 33 38 53 54 78 * 7 22 23 24 26 27 28 32 33 38 53 54 78 * 7 22 23 24 26 27 28 32 33 38 53 54 78 * 7 22 23 24 26 27 28 32 33 38 53 54 78 * 7 22 23 24 26 27 28 32 33 38 53 54 78 * 7 22 23 24 26 27 28 32 33 38 53 54 78 * 程序的运行时间:0.0242318 秒 */ int[] arr_qs = { 7, 26, 53, 22, 32, 28, 38, 23, 24, 54, 27, 78, 33 }; QuickSort qs = new QuickSort(); Console.WriteLine("快速排序:"); qs.MyQuickSort(arr_qs, 0, arr_qs.Length - 1); /*result * 7 26 53 22 32 28 38 23 24 54 27 78 33 * 7 24 23 22 26 28 38 32 53 54 27 78 33 * 7 22 23 24 26 28 38 32 53 54 27 78 33 * 7 22 23 24 26 28 38 32 53 54 27 78 33 * 7 22 23 24 26 27 28 32 53 54 38 78 33 * 7 22 23 24 26 27 28 32 53 54 38 78 33 * 7 22 23 24 26 27 28 32 33 38 53 78 54 * 7 22 23 24 26 27 28 32 33 38 53 78 54 * 7 22 23 24 26 27 28 32 33 38 53 54 78 */ int[] arr_ins = { 7, 26, 53, 22, 32, 28, 38, 23, 24, 54, 27, 78, 33 }; InsertionSort ins = new InsertionSort(); Console.WriteLine("插入排序:"); ins.MyInsertionSort(arr_ins); /*result * 7 26 53 22 32 28 38 23 24 54 27 78 33 * 7 26 53 22 32 28 38 23 24 54 27 78 33 * 7 22 26 53 32 28 38 23 24 54 27 78 33 * 7 22 26 32 53 28 38 23 24 54 27 78 33 * 7 22 26 28 32 53 38 23 24 54 27 78 33 * 7 22 26 28 32 38 53 23 24 54 27 78 33 * 7 22 23 26 28 32 38 53 24 54 27 78 33 * 7 22 23 24 26 28 32 38 53 54 27 78 33 * 7 22 23 24 26 28 32 38 53 54 27 78 33 * 7 22 23 24 26 27 28 32 38 53 54 78 33 * 7 22 23 24 26 27 28 32 38 53 54 78 33 * 7 22 23 24 26 27 28 32 33 38 53 54 78 */ int[] arr_shs = { 7, 26, 53, 22, 32, 28, 38, 23, 24, 54, 27, 78, 33 }; ShellSort shs = new ShellSort(); Console.WriteLine("希尔排序:"); shs.MyShellSort(arr_shs); /*result * gap=13 * 本轮结果: * 7 26 53 22 32 28 38 23 24 54 27 78 33 * gap=4 * 7 26 53 22 32 28 38 23 24 54 27 78 33 * 7 26 53 22 32 28 38 23 24 54 27 78 33 * 7 26 38 22 32 28 53 23 24 54 27 78 33 * 7 26 38 22 32 28 53 23 24 54 27 78 33 * 7 26 38 22 24 28 53 23 32 54 27 78 33 * 7 26 38 22 24 28 53 23 32 54 27 78 33 * 7 26 27 22 24 28 38 23 32 54 53 78 33 * 7 26 27 22 24 28 38 23 32 54 53 78 33 * 7 26 27 22 24 28 38 23 32 54 53 78 33 * 本轮结果: * 7 26 27 22 24 28 38 23 32 54 53 78 33 * gap=1 * 7 26 27 22 24 28 38 23 32 54 53 78 33 * 7 26 27 22 24 28 38 23 32 54 53 78 33 * 7 22 26 27 24 28 38 23 32 54 53 78 33 * 7 22 24 26 27 28 38 23 32 54 53 78 33 * 7 22 24 26 27 28 38 23 32 54 53 78 33 * 7 22 24 26 27 28 38 23 32 54 53 78 33 * 7 22 23 24 26 27 28 38 32 54 53 78 33 * 7 22 23 24 26 27 28 32 38 54 53 78 33 * 7 22 23 24 26 27 28 32 38 54 53 78 33 * 7 22 23 24 26 27 28 32 38 53 54 78 33 * 7 22 23 24 26 27 28 32 38 53 54 78 33 * 7 22 23 24 26 27 28 32 33 38 53 54 78 * 本轮结果: * 7 22 23 24 26 27 28 32 33 38 53 54 78 */ int[] arr_ses = { 7, 26, 53, 22, 32, 28, 38, 23, 24, 54, 27, 78, 33 }; SelectionSort ses = new SelectionSort(); Console.WriteLine("选择排序:"); ses.MySelectionSort(arr_ses); /*result * 7 26 53 22 32 28 38 23 24 54 27 78 33 * 7 22 53 26 32 28 38 23 24 54 27 78 33 * 7 22 23 53 32 28 38 26 24 54 27 78 33 * 7 22 23 24 53 32 38 28 26 54 27 78 33 * 7 22 23 24 26 53 38 32 28 54 27 78 33 * 7 22 23 24 26 27 53 38 32 54 28 78 33 * 7 22 23 24 26 27 28 53 38 54 32 78 33 * 7 22 23 24 26 27 28 32 53 54 38 78 33 * 7 22 23 24 26 27 28 32 33 54 53 78 38 * 7 22 23 24 26 27 28 32 33 38 54 78 53 * 7 22 23 24 26 27 28 32 33 38 53 78 54 * 7 22 23 24 26 27 28 32 33 38 53 54 78 */ int[] arr_hs = { 7, 26, 53, 22, 32, 28, 38, 23, 24, 54, 27, 78, 33 }; HeapSort hs = new HeapSort(); Console.WriteLine("堆排序:"); hs.MyHeapSort(arr_hs); /*result * 33 54 7 24 26 53 38 23 22 32 27 28 78 * 28 33 53 24 32 7 38 23 22 26 27 54 78 * 27 33 28 24 32 7 38 23 22 26 53 54 78 * 26 33 27 24 32 7 28 23 22 38 53 54 78 * 22 26 28 24 32 7 27 23 33 38 53 54 78 * 23 22 28 24 26 7 27 32 33 38 53 54 78 * 27 26 23 24 22 7 28 32 33 38 53 54 78 * 7 26 23 24 22 27 28 32 33 38 53 54 78 * 22 7 23 24 26 27 28 32 33 38 53 54 78 * 7 22 23 24 26 27 28 32 33 38 53 54 78 * 7 22 23 24 26 27 28 32 33 38 53 54 78 * 7 22 23 24 26 27 28 32 33 38 53 54 78 */ int[] arr_ms = { 7, 26, 53, 22, 32, 28, 38, 23, 24, 54, 27, 78, 33 }; MergeSort ms = new MergeSort(); Console.WriteLine("归并排序:"); ms.MyMergeSort(arr_ms); /*result * 26 53 * 7 26 53 * 28 32 * 22 28 32 * 7 22 26 28 32 53 * 23 24 * 23 24 38 * 27 54 * 33 78 * 27 33 54 78 * 23 24 27 33 38 54 78 * 7 22 23 24 26 27 28 32 33 38 53 54 78 */ int[] arr_cs = { 7, 26, 53, 22, 32, 28, 38, 23, 24, 54, 27, 78, 33 }; CountingSort cs = new CountingSort(); Console.WriteLine("计数排序1:"); cs.MyCountingSort(arr_cs); /*result * 数组最小值:7 * 数组最大值:78 * 每个元素个数统计:1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 1 1 1 0 0 0 1 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 * 每个元素值及比它值小的所有元素的个数统计:1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 3 4 4 5 6 7 7 7 7 8 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 13 * 7 22 23 24 26 27 28 32 33 38 53 54 78 */ int[] arr_cs2 = { 7, 26, 53, 22, 32, 28, 38, 23, 24, 54, 27, 78, 33 }; Console.WriteLine("计数排序2:"); cs.MyCountingSort2(arr_cs2); /*result * 数组最小值:7 * 数组最大值:78 * 每个元素个数统计:0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 1 1 1 0 0 0 1 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 * 7 22 23 24 26 27 28 32 33 38 53 54 78 */ int[] arr_bus = { 7, 26, 53, 22, 32, 28, 38, 23, 24, 54, 27, 78, 33 }; BucketSort bus = new BucketSort(); Console.WriteLine("桶排序:"); bus.MyBucketSort(arr_bus); /*result * 平方根:2 5 7 4 5 5 6 4 4 7 5 8 5 * 数组最小值:2 * 数组最大值:8 * 桶内元素: * 7 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 * 22 23 24 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 * 26 32 28 27 33 -1 -1 -1 -1 -1 -1 -1 -1 * 38 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 * 53 54 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 * 78 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 * 第2个桶内快排:-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 7 * 第4个桶内快排:-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 22 23 24 * 第5个桶内快排:-1 -1 -1 -1 -1 -1 -1 -1 26 27 28 32 33 * 第6个桶内快排:-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 38 * 第7个桶内快排:-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 53 54 * 第8个桶内快排:-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 78 * 排序结果:7 22 23 24 26 27 28 32 33 38 53 54 78 */ int[] arr_rs = { 7, 26, 53, 22, 32, 28, 38, 23, 24, 54, 27, 78, 33 }; RadixSort rs = new RadixSort(); Console.WriteLine("基数排序:"); rs.MyRadixSort(arr_rs); /*result * 桶内:22 32 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 * 53 23 33 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 * 24 54 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 * 26 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 * 7 27 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 * 28 38 78 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 * 桶外:22 32 53 23 33 24 54 26 7 27 28 38 78 * 桶内:7 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 * 22 23 24 26 27 28 -1 -1 -1 -1 -1 -1 -1 * 32 33 38 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 * 53 54 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 * 78 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 * 桶外:7 22 23 24 26 27 28 32 33 38 53 54 78 */ Console.WriteLine(""); Console.WriteLine(""); int[] arr_s = { 7, 22, 23, 24, 26, 27, 28, 32, 33, 38, 53, 54, 78 }; int index; SequenceSearch ss = new SequenceSearch(); Console.WriteLine("顺序查找:"); index = ss.MySequenceSearch(arr_s, 53); Console.WriteLine("查找成功: " + index); index = ss.MySequenceSearch(arr_s, 52); Console.WriteLine("查找失败: " + index); /*result * 比较第11次 * 查找成功: 10 * 比较第13次 * 查找失败: -1 */ BinarySearch bis = new BinarySearch(); Console.WriteLine("二分查找1:"); index = bis.MyBinarySearch(arr_s, 53); Console.WriteLine("查找成功: " + index); index = bis.MyBinarySearch(arr_s, 52); Console.WriteLine("查找失败: " + index); Console.WriteLine("二分查找2:"); index = bis.MyBinarySearch2(arr_s, 53, 0, arr_s.Length - 1); Console.WriteLine("查找成功: " + index); index = bis.MyBinarySearch2(arr_s, 52, 0, arr_s.Length - 1); Console.WriteLine("查找失败: " + index); /*result * low-high:7-12 * low-high:10-12 * low-high:10-10 * mid:10 * 查找成功: 10 * low-high:7-12 * low-high:10-12 * low-high:10-10 * low-high:10-9 * 查找失败: -1 */ InterpolationSearch ints = new InterpolationSearch(); Console.WriteLine("插值查找1:"); index = ints.MyInterpolationSearch(arr_s, 53); Console.WriteLine("查找成功: " + index); index = ints.MyInterpolationSearch(arr_s, 52); Console.WriteLine("查找失败: " + index); index = ints.MyInterpolationSearch2(arr_s, 53, 0, arr_s.Length - 1); Console.WriteLine("查找成功: " + index); index = ints.MyInterpolationSearch2(arr_s, 52, 0, arr_s.Length - 1); Console.WriteLine("查找失败: " + index); /*result * low-high:8-12 * low-high:10-12 * mid:10 * 查找成功: 10 * low-high:8-12 * low-high:10-12 * low-high:10-9 * 查找失败: -1 */ FibonacciSearch fs = new FibonacciSearch(); Console.WriteLine("斐波那契查找1:"); index = fs.MyFibonacciSearch(arr_s, 53); Console.WriteLine("查找成功: " + index); index = fs.MyFibonacciSearch(arr_s, 52); Console.WriteLine("查找失败: " + index); Console.WriteLine("斐波那契查找2:"); index = fs.MyFibonacciSearch2(arr_s, 53); Console.WriteLine("查找成功: " + index); index = fs.MyFibonacciSearch(arr_s, 52); Console.WriteLine("查找失败: " + index); /*result * 斐波那契数列:0 1 1 2 3 5 8 13 21 * 扩展后的数组:7 22 23 24 26 27 28 32 33 38 53 54 78 78 78 78 78 78 78 78 * low-high-k:0-11-7 * low-high-k:8-11-5 * mid-k:10-5 * 查找成功: 10 * 斐波那契数列:0 1 1 2 3 5 8 13 21 * 扩展后的数组:7 22 23 24 26 27 28 32 33 38 53 54 78 78 78 78 78 78 78 78 * low-high-k:0-11-7 * low-high-k:8-11-5 * low-high-k:8-9-4 * low-high-k:10-9-2 * 查找失败: -1 */ BlockSearch bls = new BlockSearch(); Console.WriteLine("分块查找:"); index = bls.MyBlockSearch(arr_s, 53, 4); Console.WriteLine("查找成功: " + index); index = bls.MyBlockSearch(arr_s, 52, 4); Console.WriteLine("查找失败: " + index); /*result * 序列数组: * 7 22 23 24 * 26 27 28 32 * 33 38 53 54 * 78 * 最小值最大值: * 7 26 33 78 24 32 54 78 * low-high:2-3 * mid:2 * 查找成功: 10 * * 序列数组: * 7 22 23 24 * 26 27 28 32 * 33 38 53 54 * 78 * 最小值最大值: * 7 26 33 78 24 32 54 78 * low-high:2-3 * low-high:2-1 * 查找失败: -1 */ int[] arr_bts = { 32, 24, 54, 22, 27, 38, 78, 7, 23, 26, 28, 33, 53 }; BinaryTreeSearch bts = new BinaryTreeSearch(); Console.WriteLine("二叉树查找1:"); index = bts.MyBinaryTreeSearch(arr_bts, 53); Console.WriteLine("查找成功: " + index); index = bts.MyBinaryTreeSearch(arr_bts, 52); Console.WriteLine("查找失败: " + index); Console.WriteLine("二叉树查找2:"); index = bts.MyBinaryTreeSearch2(arr_bts, 53, 0, 0); Console.WriteLine("查找成功: " + index); index = bts.MyBinaryTreeSearch2(arr_bts, 52, 0, 0); Console.WriteLine("查找失败: " + index); /*result * 第1次比较:i-0 arr[i]-32 * 第2次比较:i-2 arr[i]-54 * 第3次比较:i-5 arr[i]-38 * 第4次比较:i-12 arr[i]-53 * 查找成功: 12 * 第1次比较:i-0 arr[i]-32 * 第2次比较:i-2 arr[i]-54 * 第3次比较:i-5 arr[i]-38 * 第4次比较:i-12 arr[i]-53 * 查找失败: -1 */ Console.ReadKey(); }