12月28 数组的几种应用(冒泡、折半查找)
*************数组的应用*************
一、冒泡排序(升序、降序)
1、双层循环(循环套循环)
(1).冒泡排序是用双层循环解决。外层循环的是趟数,里层循环的是次数。
(2).趟数=n-1;次数=n-趟数。
(3).里层循环使用if比较相临的两个数的大小,进行数值交换。
打分:(去掉两个最高分,去掉两个最低分)
static void Main(string[] args) { int[] a = new int[10]{ 10, 12, 6, 9, 5, 4, 3, 17, 1, 15 }; int i, j, temp = 0,sum=0; double avg = 0.0; //冒泡排序 for (i = 1; i < a.Length; i++) { for (j = 1; j <= a.Length - i; j++) { if (a[j - 1] < a[j]) { temp = a[j]; a[j] = a[j - 1]; a[j - 1] = temp; } } } Console.WriteLine("去掉两个最高分,去掉两个最低分后分别得:"); for (i = 2; i <= a.Length - 3; i++) { Console.Write(a[i] + "分\t"); sum += a[i]; } Console.WriteLine(); avg = 1.0 * sum / (a.Length - 4); Console.WriteLine("得分总和为"+sum + "分。\t"); Console.WriteLine("平均分为"+avg + "分。\t"); }
二、折半查找(也叫二分法)
1、前提:数组必须有序。
2、主要就是3个未知量。
顶部:topsub
底部:bottomsub
中间:midsub =(topsub+bottomsub)/2
将数组一分为二,然后拿需要查找的数与midsub作比较,如果比midsub大,则舍弃上半部分,然后将下半部分一分为二,找到midsub再做比较,以此类推,直到找到为止。
static void Main(string[] args) { int[] a = new int[8] { 3 ,4, 5, 7, 8 ,9, 12,14}; int top = 0, bottom = a.Length - 1, mid; Console.Write ("请输入一个数字"); int n=Convert.ToInt32(Console.ReadLine()); //折半查找 while (bottom >= top) { mid=(bottom+top)/2; if (a[mid] < n) { top = mid + 1; } else if (a[mid] > n) { bottom = mid - 1; } else { Console.Write("找到了,在第"+(mid+1)+"个元素上"); break; } } }
其实筛选有更简单的方法:在数组a中,a.where();筛选 a.OrderBy();排序