2018-12-06

數(shù)組(二)

一、 數(shù)組的應(yīng)用

(一) 冒泡排序

冒泡排序是一種簡(jiǎn)單的排序算法。它重復(fù)地走訪過(guò)要排序的數(shù)列,一次比較兩個(gè)元素,如果它們的順序錯(cuò)誤就把它們交換過(guò)來(lái)。走訪數(shù)列的工作是重復(fù)地進(jìn)行直到?jīng)]有再需要交換,也就是說(shuō)該數(shù)列已經(jīng)排序完成。這個(gè)算法的名字由來(lái)是因?yàn)樵叫〉脑貢?huì)經(jīng)由交換慢慢“浮”到數(shù)列的頂端。

1. 算法描述

  1. 比較相鄰的元素。如果第一個(gè)比第二個(gè)大,就交換它們兩個(gè);

  2. 對(duì)每一對(duì)相鄰元素作同樣的工作,從開(kāi)始第一對(duì)到結(jié)尾的最后一對(duì),這樣在最后的元素應(yīng)該會(huì)是最大的數(shù);

  3. 針對(duì)所有的元素重復(fù)以上的步驟,除了最后一個(gè);

  4. 重復(fù)步驟1~3,直到排序完成。

2. 動(dòng)圖演示

https://images2017.cnblogs.com/blog/849589/201710/849589-20171015223238449-2146169197.gif

3. 分析過(guò)程

int[] nums={9,8,7,6,5,4,3,2,1,0}; 0,1,2,3,4,5,6,7,8,9 len = 10

第一趟比較:8 7 6 5 4 3 2 1 0 9 交換了9次 i=0 9 len-1-i

第二趟比較:7 6 5 4 3 2 1 0 8 9 交換了8次 i= 1 8

第三趟比較:6 5 4 3 2 1 0 7 8 9 交換了7次 i=2 7

第四趟比較:5 4 3 2 1 0 6 7 8 9 交換了6次

第五趟比較:4 3 2 1 0 5 6 7 8 9 交換了5次

第六趟比較:3 2 1 0 4 5 6 7 8 9 交換了4次

第七趟比較:2 1 0 3 4 5 6 7 8 9 交換了3次

第八趟比較:1 0 2 3 4 5 6 7 8 9 交換了2次

第九趟比較:0 1 2 3 4 5 6 7 8 9 交換了1次

4. 代碼演示

int[] nums = { 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 };

for (int i = 0; i < nums.Length-1; i++) //比較的次數(shù)

{

for (int j = 0; j < nums.Length-1-i; j++) //交換的次數(shù)

{

int temp = nums[j];

nums[j] = nums[j + 1];

nums[j + 1] = temp;

}

}

(二) 練習(xí)

1. 練習(xí)1

需求

定義一個(gè)大小為10的整型數(shù)組,用隨機(jī)產(chǎn)生的數(shù)據(jù)為數(shù)組元素賦值,并將它們按從大到小的順序排列

參考代碼

Random 類(lèi)

Random類(lèi)默認(rèn)的無(wú)參構(gòu)造函數(shù)可以根據(jù)當(dāng)前系統(tǒng)時(shí)鐘為種子,進(jìn)行一系列算法得出要求范圍內(nèi)的偽隨機(jī)數(shù)

Random rd = new Random()

rd.next(1,10)(生成1~10之間的隨機(jī)數(shù),不包括10)

(三) 作業(yè)

1. 作業(yè)1

需求

<v:shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"><v:stroke joinstyle="miter"><v:formulas></v:formulas><v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"></v:path></v:stroke></v:shapetype><v:shape id="圖片_x0020_16" o:spid="_x0000_i1027" type="#_x0000_t75" alt="圖8.13.BMP" style="width:257.25pt;height:211.5pt;visibility:visible;
mso-wrap-style:square"><v:imagedata src="file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image001.png" o:title="圖8.13"></v:imagedata></v:shape>

步驟:

1.定義數(shù)組存儲(chǔ)價(jià)格,并利用循環(huán)輸入。

2.定義變量min保存當(dāng)前的最低價(jià)。

3. 將min和數(shù)組中的其余元素依次比較。

2. 作業(yè)2

需求

實(shí)現(xiàn)用戶隨機(jī)輸入6個(gè)整數(shù),按從大到小排列

<v:shape id="Picture_x0020_2" o:spid="_x0000_i1026" type="#_x0000_t75" alt="Snap1" style="width:229.5pt;
height:131.25pt;visibility:visible;mso-wrap-style:square"><v:imagedata src="file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image002.png" o:title="Snap1" grayscale="t"></v:imagedata></v:shape>

實(shí)現(xiàn)思路

  1. 定義數(shù)組存放用戶輸入的數(shù)據(jù)

  2. 使用冒泡排序算法

  3. 循環(huán)輸出交換后的數(shù)組

二、 二維數(shù)組

(一) 值類(lèi)型和引用類(lèi)型

1. 描述

前面介紹的基本數(shù)據(jù)類(lèi)型都是值類(lèi)型,到目前為止,我們學(xué)過(guò)的引用類(lèi)型只有字符串和數(shù)組,那么值類(lèi)型和引用類(lèi)型有什么區(qū)別呢?

值類(lèi)型的存儲(chǔ)空間是分配在棧(stack)中,引用類(lèi)型的存儲(chǔ)空間是分配在堆(heap)中。數(shù)組屬于引用類(lèi)型,所以如下代碼代表的意思是:

int[] arr = { 1, 3, 5, 7, 9 };

數(shù)組的各個(gè)元素在中分配,并按順序依次排列。而變量arr分配于棧上,它存放的是一個(gè)內(nèi)存地址的指針,這個(gè)指針指向堆中數(shù)組元素的地址。

也就是說(shuō),可以通過(guò)變量arr找到堆上的數(shù)組元素。

<v:shape id="圖片_x0020_1" o:spid="_x0000_i1025" type="#_x0000_t75" style="width:191.25pt;height:108.75pt;visibility:visible;mso-wrap-style:square"><v:imagedata src="file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image003.png" o:title=""></v:imagedata></v:shape>

2. 演示

下面通過(guò)例子來(lái)演示值類(lèi)型和引用類(lèi)型的區(qū)別

代碼

/**

  • 值類(lèi)型演示

  • */

int num1 = 100;

int num2 = num1;

num1 = 50;

Console.WriteLine("num1={0},num2={1}", num1, num2);

/**

  • 引用類(lèi)型的演示

  • */

int[] arr1 = { 1, 3, 5, 7, 9 };

int[] arr2 = arr1;

arr1[0] = 500;

Console.Write("arr1的值是");

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

{

Console.Write(arr1[i] + ",");

}

Console.Write("arr2的值是");

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

{

Console.Write(arr2[i] + ",");

}

分析過(guò)程

=u}?o8?

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 數(shù)組(二) 一、 數(shù)組的應(yīng)用 (一) 冒泡排序 冒泡排序是一種簡(jiǎn)單的排序算法。它重復(fù)地走訪過(guò)要排序的數(shù)列,一次比較...
    拾起_518閱讀 245評(píng)論 0 0
  • 在C語(yǔ)言中,五種基本數(shù)據(jù)類(lèi)型存儲(chǔ)空間長(zhǎng)度的排列順序是: A)char B)char=int<=float C)ch...
    夏天再來(lái)閱讀 4,007評(píng)論 0 2
  • <center>#1 Two Sum</center> link Description:Given an arr...
    鐺鐺鐺clark閱讀 2,352評(píng)論 0 3
  • 2018-08-20 姓名:韓興國(guó) 公司:上海東方星教育 【六項(xiàng)精進(jìn)打卡第85天】 【知~學(xué)習(xí)】 《大學(xué)》2遍,共...
    韓興國(guó)閱讀 36評(píng)論 0 0
  • 當(dāng)思潮漫天涌, 其實(shí)已超越時(shí)間, 我是越光者, 我以我之思, 于此世 長(zhǎng)留。
    碎飄啊閱讀 171評(píng)論 0 0

友情鏈接更多精彩內(nèi)容