多维数组和交错数组笔记; 冒泡法和选择法数组排序

1.) 关于数据的几个概念:

Rank属性,即数组的维数,其值是数组类型的方括号之间逗号个数加上1。

Length属性,表示数组的元素数量,如果是二维数组,Lengt等于行数与列数之积.

Demo:利用一维数组显示斐波那契数列F(n) = F(n-1) + F(n-2) (n >=2 ),每行显示5项,20项.

static void Main(string[] args)

{

    int[] F = new int[20];

    F[0] = 1;F[1] = 1;

    //计算斐波那契数列每个元素值

    for (int i = 2; i < F.Length; i++) F[i] = F[i - 1] + F[i - 2];

    //循环显示斐波那契数列,每行显示5个

    for (int i = 0; i < F.Length; i++)

    {

        //换行

        if (i >0 && i % 5  == 0)

            Console.Write("\n");

        Console.Write(F[i].ToString().PadLeft(6, ' '));

    }

    Console.ReadKey();

}

2).多维数组

声明多维数组时,用逗号表示维数,一个逗号表示两维数组,两个逗号表示三维数组,以此类推。注意:在声明数组声明中即使没有指定维数的实际大小,也必须使用逗号分隔各个维,如:

//声明一个42列的二维数组

int[,] myArray = new int[4, 2];

//声明一个3页,5行,2列的3维数组

int[,,] myArray_3 = new int[3, 5, 2];

编程形成并显示4行4列的二维矩形数组

//生成一个4*4的u矩阵

int[,] myMatrix = new int[4, 4];

int value = 0;

for (int r = 0; r < myMatrix.GetLength(0); r++)

{

    for (int c = 0; c < myMatrix.GetLength(1); c++)

    {

        myMatrix[r, c] = value++;

        Console.Write(value + "\t");

        if (value % 4 == 0)

            Console.Write("\n");

    }

}

3.)交错数组(jagged array):

数值数组元素的默认值设置为零,而引用元素的默认值设置为 null。

交错数组是数组的数组,因此,它的元素是引用类型,初始化为 null

交错数组元素的维度和大小可以不同,需要声明、实例化并且初始化后才能使用

//定义一个交错数组,有3个元素,然后再给三个元素分别赋值(一维数组)

int[][] myJaggedArray = new int[3][];

myJaggedArray[0] = new int[]{ 1,2,3,4};

myJaggedArray[1] = new int[] { 4, 5,};

myJaggedArray[2] = new int[] { 6, 7, 8 };



//定义一个交错数组,有3个元素,声明交错数组时初始化一维交错数组的每个元素对应的一维数组

int[][] myJaggedArray2 = new int[3][]

{

    new int[]{1,2,3,4},

    new int[]{4,5},

    new int[]{6,7,8},

};

//循环取出交错数组的所有元素并显示出来

for (int r = 0; r < myJaggedArray2.Length; r++)

{

    //myJaggedArray2[r]元素为一维数组,用Leng属性或GetLeng()方法获取数组长度

    //对于一维数组GetLength(0)和GetLength(),返回结果一样

    for (int c = 0; c < myJaggedArray2[r].GetLength(0); c++)

    {

        Console.Write(myJaggedArray2[r][c] + "\t");

    }

    Console.WriteLine();

}

Console.WriteLine("------------------------------");

           

//声明一个一维交错数组,其元素为大小不同的二维数组

int[][,] myJaggedArray3 = new int[3][,]

{

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

    new int[,]{{11,12},{13,14}},

    new int[,]{{21,22},{ 23, 24},{ 25, 26},{27,28}},

};

//循环取出交错数组的所有元素并显示出来

for (int r = 0; r < myJaggedArray3.Length; r++)

{

    //myJaggedArray3[r].GetLength(0)返回一维交错数组第r个元素的0维数组长度,即元素数组的行

    for (int j = 0; j < myJaggedArray3[r].GetLength(0); j++)

    {

        //myJaggedArray3[r].GetLength(1)返回一维交错数组第r个元素的1维数组长度,即元素数组的列

        for (int k = 0; k < myJaggedArray3[r].GetLength(1); k++)

        {

            Console.Write(myJaggedArray3[r][j, k] + "\t");

        }

        Console.WriteLine();

    }

    Console.WriteLine();

}

4.) 数组的基本操作和排序

数据常用操作:数组求和、求平均值、最值及其位置

Array类的常用操作:

Array.clear(数组名,起始元素,元素个数)

Array.Copy(源数组,目标数组,要复制的元素个数);

Array.Copy(源数组,目标数组,目标起始索引,要复制的元素个数);

Array.Reserve(数组名)

Array.Reserve(数组名,起始索引,元素个数)

Array.Sort(数组名)

数组对象的常用操作:

Clone(),CopyTo(),getLength(),GetLowerBound(), GetUpperBound()等方法

Leng,Rank等属性.

数组的常见排序方法,

冒泡法(bubble sort)、选择法(SelectSort);

以10个元素的一维数组升序排序为例,说明冒泡法排序:

将第一个元素与第二个元素比较,如果元素1>元素2,则交换顺序,然后依次每个元素与后面的一个元素比较,大的值往后移,直到9,10元素比较完,第一轮冒泡比较结束

然后开始第二轮,从第二个元素与相邻后面的元素比较,直到比较第8,9元素,

以此类推,比较10-1=9次,就完成了冒泡法升序排列.

        static void Main(string[] args)
        {
            int[] numbers = { 18, 12, 3, 45, 6, 7, 30, 10 };int tmp = 0;
            for (int i = 0; i < numbers.Length; i++)//10个元素,循环9次
            {
                for (int j = 0; j < numbers.Length -1 -i; j++)
                {
                    if(numbers[j] > numbers[j+1])
                    {
                        tmp = numbers[j];
                        numbers[j] = numbers[j + 1];
                        numbers[j + 1] = tmp;
                    }
                }
            }
            foreach (var number in numbers)
            {
                Console.WriteLine(number);
            }
            Console.ReadKey();
        }

选择法就是依次循环选择出最小值,从前往后依次放在的指定位置即可,不再多叙.

int[] numbers = { 18, 12, 3, 45, 6, 7, 30, 10 }; int tmp = 0;
//Select Sort
for (int i = 0; i < numbers.Length; i++)
{
    for (int j = i; j < numbers.Length; j++)
    {
        if (numbers[j] < numbers[i])
        {
            tmp = numbers[i];
            numbers[i] = numbers[j];
            numbers[j] = tmp;
        }
    }
}
foreach (var number in numbers)
{
    Console.WriteLine(number);
}
Console.ReadKey();

题外话,忽然发现C#数组可以这么定义,不报错,神奇,,,

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

  • 9
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值