标签:
1.顺序查找
顺序查找又叫线性查找,是最基本的查找技术,它的查找过程是:从表中第一个(或最后一个)记录开始,逐个进行记录的关键字和给定值比较,若某个记录的关键字和给定值相等,则查找成功,找到所查的记录;如果直到最后一个(或第一个)记录,其关键字和给定值比较都不等时,则表中没有所查的记录,查询不成功。
流程:输入要查找的数,查找,判断输出
举例:
1 static void Main(string[] args) 2 { 3 //查找 4 int[] a = new int[8] {2,9,8,13,23,19,33,40}; 5 //输入要找的数 6 int n =Convert.ToInt32(Console.ReadLine()); 7 //查找 8 bool found = false; 9 for (int i = 0; i < 8; i++) 10 { 11 if (n==a[i]) 12 { 13 //输出 14 found = true; 15 Console.WriteLine("找到啦,是第{0}个数。",i+1); 16 } 17 } 18 19 if (found==false) 20 { 21 Console.WriteLine("没找到"); 22 } 23 24 }
2.彩票生成器
1 static void Main(string[] args) 2 { 3 //彩票生成器 4 int[] a = new int[7]; 5 Random rand = new Random(); 6 7 //生成7个不重复的数 8 for (int i = 0; i < 7; i++) 9 { 10 int n = rand.Next(36); 11 n++; 12 bool cunzai = false; 13 for (int j = 0; j < a.Length; j++) 14 { 15 if (a[j]==n) 16 { 17 cunzai = true; 18 break; 19 } 20 } 21 22 //判断存在不存在,如果不存在,放进a数组中,如果存在,重新生成。 23 if (cunzai==false) 24 { 25 a[i] = n; 26 } 27 else 28 { 29 i--; 30 } 31 } 32 for (int i = 0; i <a.Length; i++) 33 { 34 Console.Write(a[i]+" "); 35 } 36 }
2.二分法查找
折半查找,也叫二分查找,当在一个数组或集合中查找某个元素时,先定位出中间位置元素,如果要查找的元素正好和该中间位置元素相等,通过一次查找,就能找到匹配元素;如果要查找的元素小于该中间位置元素,就抛弃后面一半的元素,在前面一半的元素中再定位出中间位置元素,如此反复,直到找到匹配元素;如果要查找的元素大于该中间位置元素,就抛弃前面一半的元素,在后面一半的元素中定位出中间位置元素,如此反复。
面临的第一个问题是:中间位置元素如何定位?在折半查找中规定:当元素个数是奇数,比如有3个元素,中间位置元素是索引为1的元素;当元素个数是偶数,比如有4个元素,索引为1和2的元素理论都是中间位置元素,但在折半查找中,把后面这个,即索引为2的元素视为中间位置元素。
面临的第二个问题是:由于,要查找的元素和中间位置元素之间需要比较,我们在比较之前,势必要让数组按升序或降序来排列。
自定义一个类,该类维护着一个int[]类型数组,通过构造函数确定数组长度和对数组进行排序,并提供打印数组元素的方法,以及折半算法。
举例:
1 static void Main(string[] args) 2 { 3 //二分法查找(前提条件数组按大小排列) 4 int[] a = new int[8] {1,2,3,4,5,6,12,33 }; 5 6 //输入要找的数 7 int find = Convert.ToInt32(Console.ReadLine()); 8 9 //定义开始坐标,中间坐标,结束坐标,中间坐标=(开始坐标+结束坐标)/2 10 int start = 0, end = a.Length - 1, mid; 11 12 //比较 13 while(true) 14 { 15 mid = (start + end) / 2; 16 if (a[mid]==find) 17 { 18 Console.WriteLine("找到啦,是第{0}个数",mid+1); 19 break; 20 } 21 else 22 { 23 if (find>a[mid]) 24 { 25 start = mid + 1; 26 } 27 else 28 { 29 end = mid - 1; 30 } 31 if (end<start) 32 { 33 Console.WriteLine("没找到"); 34 break; 35 } 36 } 37 } 38 }
标签:
原文地址:http://www.cnblogs.com/kellybutterfly/p/5422302.html