今天和大家一起來討論一下C#中的數組和排序。首先,先感謝一下大家的討論和關注,這無疑是對我本人的最大支持,有了討論我們才可以發現問題,解決問題,這樣我們就可以不斷的進步,不斷的提升自己。在這裡我還想多說兩句,在之前的留言中我看到有說我寫的文章比較淺,我想和大家解釋一下,本人所寫的文章都是一些基礎中的基礎,比較適合新人來研究和學習(本人也是個新手),希望老鳥和高手們給予正確的指點和幫助,因為我們都是一個台階一個台階爬上來的。。。
好的!我們來進入今天的正題-----數組和排序。今天的內容相對而言不是很多,但是有些東西是比較重要的比如說:冒泡排序,冒泡排序好像在面試的時候問的挺多的!呵呵!還是先來看一下一維數組吧,什麼叫數組: 數組就是指具有相同名稱和類型的一組變量,數組中的每個變量稱為數組元素。由於有了數組,可以用相同名字引用一系列變量,並用索引號(下標)來識別它們。在許多場合中,我們使用數組可以縮短和簡化程序。
還是老樣子,我們用例子來說話:
1 class Program
2 {
3 static void Main(string[] args)
4 {
5 string name1 = "人族聯盟";
6 string name2 = "獸人部落";
7 string name3 = "不死亡靈";
8 string name4 = "暗夜精靈";
9 Console.WriteLine("第一位玩家所用種族:{0}", name1);
10 Console.WriteLine("第二位玩家所用種族:{0}", name2);
11 Console.WriteLine("第三位玩家所用種族:{0}", name3);
12 Console.WriteLine("第四位玩家所用種族:{0}", name4);
13 Console.ReadKey();
14 }
15 }
運行結果:
大家一看就能看出上面這些代碼比較麻煩而且也比較啰嗦,我們用數組寫一下:
1 class Program
2 {
3 static void Main(string[] args)
4 {
5 //聲明有4個值得數組
6 string[] name = new string[4] { "人族聯盟", "獸人部落", "不死亡靈", "暗夜精靈" };
7 for(int i=0;i<4;i++)//循環4次
8 {
9 //輸出每個玩家
10 Console.WriteLine("第{0}位玩家所用種族:{1}",i+1,name[i]);
11 }
12 Console.ReadKey();
13 }
14 }
運行結果:
從例子中我們就可以明顯的看出來用數組的好處,它不僅能夠大大減少代碼的數量,而且能夠通過循環來操作更多的值,這樣就可以讓我們寫出更漂亮的代碼了。
為了更進一步了解數組我們還是看一下它的語法結構吧:
數組類型[] 數組名=new 數據類型[數組長度];
上面這個是創建數組,舉個例子:int[] num =new int [5];//創建一個容納5個整形值得數組
其中new是關鍵字,就是在內存裡給數組分配了保存值得空間。數組裡面的值(元素)都必須是同一種類型。而且數組長度是表示這個數組裡最多能容納多少值(元素)。我們也可以給數組初始化比如:int [] num =new int [5]{12,32,24,55,13,33};這裡面數組有幾個值,那麼數組長度就是多少。如果數組長度是5,而數組中放入了第6個值,那麼程序就會報錯,這個也就是我們所說的數組越界。
數組的長度我們有必要簡單的說一下,一般數組的長度表示為:數組名.Length,這樣我們就可以得到數組的長度了。來看個例子:
1 class Program
2 {
3 static void Main(string[] args)
4 {
5 //初始化一個字符串數組
6 string[] name = { "人族聯盟", "獸人部落", "不死亡靈", "暗夜精靈" };
7 //循環從0開始,代表下標www.2cto.com
8 for (int i = 0; i < name.Length; i++)//(^o^)注意啦!Length在這裡!
9 {
10 //判斷這個數組的一個元素的值是否是獸人部落
11 if (name[i] == "獸人部落")
12 {
13 Console.WriteLine("第{0}個是{1}。",i+1,name[i]);
14 break;
15 }
16 }
17 Console.ReadKey();
18 }
19 }
運行結果:
上面這個就是Length的用法,Length就是用來得到一個數字的長度,在許多情況下我們都是不可能知道數組的長度的,所以有了數組名.Length就方便多了。
接下來我們看一下排序,對於排序我想大家第一感覺想到的就是冒泡排序了,好的接下來我們就看一下冒泡排序,首先來了解一下冒泡排序的概念(概念來自百度文庫):
依次比較相鄰的兩個數,將小數放在前面,大數放在後面。即首先比較第1個和第2個數,將小數放前,大數放後。然後比較第2個數和第3個數,將小數放前,大數放後,如此繼續,直至比較最後兩個數,將小數放前,大數放後。重復以上過程,仍從第一對數開始比較(因為可能由於第2個數和第3個數的交換,使得第1個數不再小於第2個數),將小數放前,大數放後,一直比較到最大數前的一對相鄰數,將小數放前,大數放後,第二趟結束,在倒數第二個數中得到一個新的最大數。如此下去,直至最終完成排序。
由於在排序過程中總是小數往前放,大數往後放,相當於氣泡往上升,所以稱作冒泡排序。
以上就是冒泡排序的概念,概念畢竟是概念,我感覺沒有例子說明的更清楚些;好的,我們還是用例子來說話:
1 class Program
2 {
3 static void Main(string[] args)
4 {
5 int[] change = { 23, 11, 54, 33, 7 };
6 int length = change.Length;//得到數組的長度
7 int i;
8 Console.WriteLine("冒泡排序前:");
9 for (i = 0; i < length; i++)//循環輸出排序前的值
10 {
11 Console.WriteLine("{0}", change[i]);
12 }
13 //下面進行冒泡排序(降序)
14 for (i = 0; i < length - 1; i++)
15 {
16 for (int j = 0; j < length - i - 1; j++)
17 {
18 //如果數組中相鄰的兩個元素前面的大於後面的,那麼進行交換。
19 if (change[j] < change[j + 1])
20 {
21 int empty = change[j];
22 change[j] = change[j + 1];
23 change[j + 1] = empty;
24 }
25 }
26 }
27 Console.WriteLine("冒泡排序後:");
28 for (i = 0; i < length; i++)
29 {
30 Console.WriteLine("{0}", change[i]);//循環輸出冒泡排序結果
31 }
32 Console.ReadKey();
33 }
34 }
運行結果:
對於數組的排序有好多種方法,上面這種是最常規的方法,當然在Array類中有兩個方法就是專門來完成排序的,一會我們再來看這兩方法,下面我們還是來看一下語法吧,只要搞懂語法了,就可以自己隨便排序了。
冒泡排序語法:
for (int i = 0; i < 數組長度 - 1; i++)
{
for (int j = 0; j < 數組長度 - i - 1; j++)
{
if (數組名[j] < 數組名[j + 1])
{
int empty = 數組名[j];
數組名[j] = 數組名[j + 1];
數組名[j + 1] = empty;
}
}
}
上面這個語法是降序排序,如果想升序的話就把if(數組名[j]<數組名[j=1])裡面的小於號“<”改成大於號“>”就可以了。
剛才我們說到了Array類中的兩個排序的方法,下面我們就簡單的介紹一下Array類中的這兩個方法。
在Array中實現升序排列的方法是Array.Sort(數組名),比如:Array.Sort(change).當然了降序也有Array.Reverse(數組名),比如:Array.Reverse(change),這個Reverse就是把數組的排序顛倒過來,也叫反轉。
下面我們就把這兩個方法放到實例中看看效果:
1 class Program
2 {
3 static void Main(string[] args)
4 {
5 int[] change = { 23, 11, 54, 33, 7 };
6 int length = change.Length;//得到數組的長度
7 int i;
8 Console.WriteLine("Array排序前:");
9 for (i = 0; i < length; i++)//循環輸出排序前的值
10 {
11 Console.WriteLine("{0}", change[i]);
12 }
13 //下面是Array.Sort升序排列
14 Array.Sort(change);
15 Console.WriteLine("Array.Sort排序後:");
16 for (i = 0; i < length; i++)
17 {
18 Console.WriteLine("{0}", change[i]);//循環輸出Array.Srot升序排列結果
19 }
20 //下面是Array.Reverse降序排列後
21 Array.Reverse(change);
22 Console.WriteLine("Array.Reverse排序後:");
23 for (i = 0; i < length; i++)
24 {
25 Console.WriteLine("{0}", change[i]);//循環輸出Array.Reverse降序排列結果
26 }
27 Console.ReadKey();
28 }
29 }
運行結果:
冒泡排序和Array類中的兩個方法排序實現出來的效果是相同的,不過相比而言冒泡排序的通用性很強,而且使用范圍也比較廣,還是希望大家多采用冒泡排序。
總結:1.數組的創建;
2.數組的長度;
3.冒泡排序;
4.Array類的兩個方法;
以上就是本次的分享,可能內容比較少,但是只要把它都很好的掌握了,我覺得也是一種進步,知識在於積累嘛!對吧!Ok!The end!
此文是本人的個人觀點,如有不完善或者不准確的地方,歡迎高手進行批評,老鳥進行指點。
摘自 青蘋果