2017-9-18C#笔记(查找,排序,形参数组)

  1. 查找

查找是在一批数据中查找指定的数据,如最值查找或指定值查找,查找结束后应该给出查找成功与否的结论.

目前常用的查找算法有顺序查找,二分法查找,hash查找、二叉排序树查找等

(1)   顺序查找

顺序查找指从数组的一端开始,顺序扫描数组中的每个元素,依次将扫描的数组元素和指定值相比较。若当前扫描的元素与指定值相等,则查找成功;反之则失败。

顺序查找是一种算法思想最简单的算法,它对于任何结构的数组都适用,并且不要求数组中元素有序排列,但是其查找效率很低,对于有序的数组或数据量太大的数组都不适宜采用。

例如:使用顺序查找法查找二位数组中的最小值最大值

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace ConsoleApplication1

{

class Program

{

static void Main(string[] args)

{

//利用顺序查找法查找二维数组中的最小值,最大值;

//设计变量保存二位数组中的最小值最大值以及他们的位置;

int max, min, maxRow, maxCol, minRow, minCol;

int[,] A = new int[2, 3] { { 1, 2, 3 }, { 4, 5, 6 } };

//对最值以及他们的位置进行初始化

max = A[0, 0];

min = A[0, 0];

maxRow = 0; maxCol = 0;

minRow = 0; minCol = 0;

//顺序扫描数组中的每一个元素并记录相应的数组的位置

for (int i = 0; i < 2; i++)

for (int j = 0; j < 3; j++)

{

if (max < A[i, j])

{

max = A[i, j];

maxRow = i;

maxCol = j;

}

if (min > A[i, j])

{

min = A[i, j];

minRow = i;

minCol = j;

}

}

Console.WriteLine("The Max Value is A[{0},{1}]:{2}", maxRow, maxCol, max);

Console.WriteLine("The Min Value is A[{0},{1}]:{2}", minRow, minCol, min);

Console.Read();

}

}

}

(2)   二分法查找:

二分法查找又称为折半查找,其算法的步骤如下:

①  假设数组中元素是按照升序排列,首先将数组中间位置的元素与查找指定值比较,如果两者量筒,则查找成功

②  否则利用中间位置记录将数组分成前后两个字数组,如果中间位置的元素值大于查找指定值,则进一步查找前一个数组,否则进一步查找后一个数组。

③  重复以上过程,直到找到满足条件的记录,使查找成功或直到数组不存在为止,此时查找不成功。

④  二分法的优点是比较次数少,查找速度快,平均性能好;其缺点就是要求待查数组为有序数组。

利用二分法查找算法在有序地以为数组中查找指定值。

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace ConsoleApplication1

{

class Program

{

static void Main(string[] args)

{

int low, high, mid, pos = -1;

string sName;

string[] Name = new string[15] { "Alice", "Bob", "Carol", "David", "Even", "Frank", "George", "Jerry", "Jhon", "Kitty", "Larry", "Marry", "Nancy", "Smith", "Tom" };

Console.WriteLine("please enter the search name:");

sName = Convert.ToString(Console.ReadLine());

low = 0;

high = Name.GetLength(0) - 1;

while (high >=low)

{

mid=(low+high)/2;

//数组中间位置的元素与查找指定值比较,如果两者相同,则查找成功

if (String.Equals(sName, Name[mid]))

{

pos = mid;

break;

}

//根据中间值与待查找值的关系,确定继续查找的字数组。

if (String.Compare (sName,Name[mid])>0)

low=mid+1;

else

high=mid-1;

}

if (pos ==-1)

Console .WriteLine ("Not found");

else

Console .WriteLine ("Name[{0}]:{1}",pos ,Name[pos]);

Console.ReadLine();

}

}

}

3.排序

(1)冒泡

Bubble Sort,是计算机科学领域的一种简单的排序方法,它重复的走过要排序的数列,一次比较量两个元素,如果他的顺序错误就把他们交换过来。走访数列的工作是在重复的进行的直达无需交换,也就是说该数列已将排序完成。

以升序排列为例,冒泡排序算法的流程如下:

将被排列的记录数组A垂直排列,每个记录A[i]看作是重量为A[i]值得气泡

根据轻气泡不能在重气泡之下的原则,从下往上(或从上往下)扫描数组A:凡扫描到违反原则的轻气泡,就时其向上“漂浮”。如此反复进行,直到最后任何两个气泡都是轻者在上重者在下。

冒泡排序就是讲最小的元素往前调或者把大的元素往后调。比较是相邻的两个元素,交换也是相邻的这两个元素之间。所以,如果;两个元素相等,不会发生交换;如果两个相等的元素没有相邻,那么即使通过前面的两两交换把两个相邻起来,这时候也不会交换,所以相同元素的前后顺序并没有改变,因此冒泡法是一种稳定的排序算法。

int A[]=new int [10];

int temp;

for (int i=0;i<10;i++)

A[i]=Convert .ToInt32(Console .ReadLine());

for (int i=0;i<10-1;i++)

for (int j=10-i;j>i;j++)//

if (ê?§A[j]>A[j-1])

{

temp=A[j];

A[j]=A[j-1];

A[j-1]=temp;

}

foreach(int t in A)

Console.Write(t+" ");

Console.ReadLine ();

(3)   选择排序

(Selection Sort)是每一趟从待排序的数据元素中选出最小(最大)的一个元素,顺序放在已排序好的数列的最后,直到全部待排序的数据元素排序完。

int[] A=int[10];

int minPos,temp;

for (int i=0;i<10;i++)

A[i]=Convert .ToInt32 (Console.ReadLine ());

for (int i=0;i<10-1;i++)//控制进行n-1趟扫描

{

minPos =i;//将最值得位置初始化为无序区的第一个元素

for (int j=i+1;j<10;j++)、、控制第i趟的扫描范围

if (A[j]<A[minPos])minPos =j;//记录最值得位置

if (minPos !=i)//将最值与无序区的第一个元素进行交换

{

temp =A[minPos ];

A[minPos ]=A [i];

A[i]=temp;

}

}foreach(int t in A )//输出排序后的数组

Console.Write (t+" ");

4.形参数组

①在一个形参;列表中醉倒只有一个形参数组;

①   如果参数列表中存在形参数组,那么形参数组必须是参数列表中的最后一个

②   形参数组必须是一维数组

③   不能将形参数组和ref、out修饰符组合起来使用

④   除了允许在调用使用可变数量的实参,形参数组与同一类型的值形参完全等效。

形参数组室友借助关键params和[]完成声明的

void Text(params int[] invals)\

对形参数组的调用

(1)   用逗号分隔开的该数据类型的元素列表,要求所有元素必须是方法声明中指定的类型,例如上述Text方法的调用Text(10,20,30)

(2)   一个元素为该数据类型的数目,例如Text调用

int [] intArray =new int [3]{1,2,3};

Text(intArray);

注意调用含有形参数组的方法时实参处不需要使用params

编写方法计算10个学生的总成绩按照总成绩降序排列学生信息:

第一步就是录入相应的学生的成绩信息进入数组

第二步将数组中的学生成的总值进行相加得到相应的总成绩然后将总成绩并入到数组之中

依靠关键的学生的排名进行排序

时间: 2024-10-08 17:08:24

2017-9-18C#笔记(查找,排序,形参数组)的相关文章

输入一个已经按升序排序的数组和一个数字 ,在数组中查找两个数,使得他们的和是输入的那个数字

package shuzu; /* * 输入一个已经按升序排序的数组和一个数字 * 在数组中查找两个数,使得他们的和是输入的那个数字,要求时间复杂度为o(n) * 如果有多对数字的和等于输入的数字,输出任意一对即可. */ public class demo1 { private static void findAns(int[] data,int sum) { int size=data.length; int begin =0; int end=size-1; while(begin < s

JavaScript学习笔记【3】数组、函数、服务器端JavaScript概述

笔记来自<JavaScript权威指南(第六版)> 包含的内容: 数组 函数 服务器端JavaScript概述 数组 数组是动态的:根据需要它们会增长或缩减,并且在创建数组时无须声明一个固定的大小或在数组大小变化时无须重新分配空间. 数组可能是稀疏的:索引不一定要连续的,它们之间可以有空缺. 通常,数组的实现是经过优化的,用数字索引来访问数组元素一般来说比访问常规的对象属性要快很多. 数组继承自Array.prototype中的属性,它定义了一套丰富的数组操作方法. 如果省略数组直接量中的某个

我的读书笔记(排序算法)

1.快速排序 假设待排序的序列为L[m...n],而一趟排序目的就是将其分割为两个子序列,分别为L[m...middle-1]和L[middle+1...n],其中L[m...middle-1]中的每个元素都小于L[middle],而L[middle+1...n]中的每个元素都大于L[middle] 递归调用快速排序算法,对L[m...middle-1]和L[middle+1..n]分别进行排序 由于是原地排序,所以递归结束后就自然形成了有序序列 1 /// <summary> 2 /// 快

二分查找二维数组

转载请注明出处:http://blog.csdn.net/ns_code/article/details/24977113 剑指offer上的第一道题目,在九度OJ上测试通过 题目描述: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 输入: 输入可能包含多个测试样例,对于每个测试案例, 输入的第一行为两个整数m和n(1<=m,n<=1000):代表将要输入的矩阵的行数和列数

通过折半查找,查找某一数组中是否存在某个数

实现折半查找int binsearch(int x,int v[],int n),该函数用于判断已排序的数组v中是否存在某个特定的值x,数组v的元素必须以升序排序.如果v中包含x,则函数返回x在v中的位置(介于0~n-1之间的一个整数):否则函数返回-1. #include <stdio.h> int binsearch(int x, int v[],int n) { int left = 0;//数组最左边的位置 int right = n-1;//数组最右边的位置 int mid = 0;

C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com

原文:C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 本文由 arthinking 发表于315 天前 ⁄ itzhai.com原创文章 ⁄ C语言 ⁄ 评论数 3 ⁄ 被围观 1,775 views+ 指针数组: 在一个数组中,如果它的元素全部都是指针类

17、把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。

把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素. 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1. NOTE:给出的所有元素都大于0,若数组大小为0,请返回0. eg: 输入 3 4 5 1 2 输出 1 思路:用二分法查找最小元素 三种情况: (1)rotateArray[mid] >rotateArray[high]: like:[x,x,x,6,x,x,2],此时最小数字一

常用查找排序算法

1.折半查找算法: 对于一个已排好序的数组,若要查找某元素是否属于数组中,则可以用这种算法. 返回找到的元素在数组中的下标,找不到则返回-1 #include <stdio.h> #define LEN 8 int a[LEN] = { 1, 3, 3, 3, 4, 5, 6, 7 }; int binarysearch(int number) { int mid, start = 0, end = LEN - 1; while (start <= end) { mid = (start

输入一个递增排序的数组和一个数字 s

题目: 输入一个递增排序的数组和一个数字 s. 在数组中查找两个数,使得它们的和正好是 s. 如果有多对数字的和等于 s,输出任意一对即可. 解答: 1 public class Solution { 2 3 public static void main(String[] args) { 4 int[] data = {1,2,4,7,11,15}; 5 System.out.println(findNumberWithSum(data, 15)); 6 } 7 8 private stati