日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

3.5.2 冒泡排序类

發布時間:2023/12/19 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 3.5.2 冒泡排序类 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
那么,我們就以冒泡排序為例,把它改造成一個類。首先,單擊菜單,“項目”-“添加類”,添加一個BubbleSort.cs類文件。IDE自動為我們創建如下代碼: using?System;
using?System.Collections.Generic;
using?System.Text;

namespace?Chapter35
{
????
class?BubbleSort
????
{
????}

}

  從這段代碼中我們可以知道:
  ·我們的類在Chapter35命名空間內,由于主程序也在這個命名空間內,不需要 using Chapter35 就可以直接使用 BubbleSort 類。
  ·系統已經 using 了三個命名空間,可以直接使用這些命名空間里面的類型。

?

  在詳細介紹類以及類的各種成員以前,我想先讓大家看完整的 BubbleSort.cs代碼,這是一典型的類,你可能會驚訝和先前的排序代碼相比面目全非。

using?System;
using?System.Collections.Generic;
using?System.Text;

namespace?Chapter3
{
????
enum?SortType
????
{
????????ASC,??
//正序?A-Z
????????DESC??//到序?Z-A
????}


????
class?BubbleSort
????
{
????????#?region?字段
????????
//?表示排序類型的私有字段
????????private?SortType?order;
????????
//?表示排序數組的私有字段
????????private?int[]?list;
????????
//?表示迭代次數的私有字段
????????private?int?iterateCount;
????????#?endregion

????????#?region?屬性
????????
//?表示排序類型的屬性,可讀可寫
????????public?SortType?Order
????????
{
????????????
get?{?return?order;?}
????????????
set?{?order?=?value;?}
????????}

????????
//?表示排序數組的屬性,可讀可寫
????????public?int[]?List
????????
{
????????????
get?{?return?list;?}
????????????
set?{?list?=?value;?}
????????}

????????
//?表示迭代次數的屬性,只讀
????????public?int?IterateCount
????????
{
????????????
get?{?return?iterateCount;?}
????????}

????????#?endregion

????????#?region?構造方法
????????
//?沒有任何參數的構造方法
????????public?BubbleSort()
????????
{
????????????order?
=?SortType.ASC;
????????}

????????
//?帶有一個參數的重載構造方法
????????public?BubbleSort(int[]?arr)
????????
{
????????????list?
=?arr;
????????????order?
=?SortType.ASC;
????????}

????????
//?帶有兩個參數的重載構造方法
????????public?BubbleSort(int[]?arr,?SortType?type)
????????
{
????????????list?
=?arr;
????????????order?
=?type;
????????}

????????#?endregion

????????#?region?私有方法
????????
//?用于交換兩個變量私有方法
????????private?void?Swap(ref?int?a,?ref?int?b)
????????
{
????????????
int?c?=?a;
????????????a?
=?b;
????????????b?
=?c;
????????}

????????#?endregion

????????#?region?公有方法
????????
//?用于排序操作的公有方法
????????public?void?Sort()
????????
{
????????????
bool?isOK?=?false;
????????????iterateCount?
=?0;
????????????
while?(!isOK)
????????????
{
????????????????isOK?
=?true;
????????????????
for?(int?i?=?0;?i?<?list.Length?-?1;?i++)
????????????????
{
????????????????????iterateCount
++;
????????????????????
switch?(order)
????????????????????
{
????????????????????????
case?SortType.ASC:
????????????????????????????
{
????????????????????????????????
if?(list[i]?>?list[i?+?1])
????????????????????????????????
{
????????????????????????????????????Swap(
ref?list[i],?ref?list[i?+?1]);
????????????????????????????????????isOK?
=?false;
????????????????????????????????}

????????????????????????????????
break;
????????????????????????????}

????????????????????????
case?SortType.DESC:
????????????????????????????
{
????????????????????????????????
if?(list[i]?<?list[i?+?1])
????????????????????????????????
{
????????????????????????????????????Swap(
ref?list[i],?ref?list[i?+?1]);
????????????????????????????????????isOK?
=?false;
????????????????????????????????}

????????????????????????????????
break;
????????????????????????????}

????????????????????}

????????????????}

????????????}

????????}

????????
//?用于把字符數組轉化為字符串的公有方法
????????public?string?GetDataString()
????????
{
????????????StringBuilder?sb?
=?new?StringBuilder();
????????????
for?(int?i?=?0;?i?<?list.Length;?i++)
????????????????sb.Append(list[i]);
????????????
return?sb.ToString();
????????}

????????
//?用于把字符數組轉化為字符串的公有重載方法,接受一個字符串參數作為分割符
????????public?string?GetDataString(string?separator)
????????
{
????????????StringBuilder?sb?
=?new?StringBuilder();
????????????
for?(int?i?=?0;?i?<?list.Length;?i++)
????????????
{
????????????????sb.Append(list[i]);
????????????????sb.Append(separator);
????????????}

????????????sb.Remove(sb.Length?
-?separator.Length,?separator.Length);
????????????
return?sb.ToString();
????????}

????????#?endregion
????}

}

調用類的代碼如下: int[]?list1?=?{?1,?0,?6,?5,?7,?9,?2,?8,?3,?4?};
BubbleSort?sort?
=?new?BubbleSort(list1);
Console.WriteLine(
"排序前:?"?+?sort.GetDataString());
sort.Sort();
Console.WriteLine(
"迭代次數:?"?+?sort.IterateCount);
Console.WriteLine(
"排序后:?"?+?sort.GetDataString());
Console.WriteLine(
"---------------------分割符---------------------");
int[]?list2?=?{?7,?6,?9,?8,?5,?3,?4,?2,?1,?0?};
sort.List?
=?list2;
Console.WriteLine(
"排序前:?"?+?sort.GetDataString());
sort.Order?
=?SortType.DESC;
sort.Sort();
Console.WriteLine(
"迭代次數:?"?+?sort.IterateCount);
Console.WriteLine(
"排序后:?"?+?sort.GetDataString("->"));
  不去看代碼,從運行后的效果可以看出這個 BubbleSort 類相比先前做的例子有以下改進:
  ·支持從小到大、從大到小兩種排序類型。
  ·支持自定義輸出的分割符,比如“->”。
  ·可以知道排序的迭代次數。
  假設冒泡排序類是別人寫的,我們先來看一下調用的代碼熟悉.NET下對象使用:
  1. 第一行代碼聲明了一個整數數組用于排序。
  2. 第二行代碼實例化了一個 BubbleSort 類。前面提到過,類是一個抽象的東西,要為我們所用就需要先得到一個實例。就好比我們先要買一個真正的房子然后才能居住。BubbleSort sort = new BubbleSort(list1); 在實例化的時候把排序數組直接賦值給類的構造方法,然后得到的實例為 sort。構造方法可以理解為一個初始化方法。
  3. 第三行代碼調用了 BubbleSort 的 GetDataString()方法。GetDataString()方法返回一個字符串表示數組的內容。方法可以理解為一個具有某種操作的功能,可以接受一些參數并返回一個值,在這里的GetDataString()方法返回一個字符串。
  4. 第4行代碼調用了 BubbleSort 的 Sort() 方法進行排序操作。 Sort()方法不返回任何值。
  5. 第5行代碼輸出 BubbleSort 的 IterateCount 屬性的值,它表示某次排序操作的迭代(循環)次數。
  6. 第6行代碼再次調用 BubbleSort 的 GetDataString() 方法輸出排序后的數組。
  7. 第7行代碼輸出了一行分割符,用于再一次的反向排序。
  8. 第8行代碼聲明了另外一個整數數組用于排序。
  9. 第9行代碼重新設置了 BubbleSort 的 List 屬性為新的數組
  10. 第10行代碼調用了 BubbleSort 的 GetDataString()方法輸出排序前的數組。
  11. 第11行代碼設置 BubbleSort 的 Order 屬性為 SortType.DESC,表示排序方式使用倒序。Order性中的類型是SortType枚舉。鼠標停留在Order字段上,IDE顯示了屬性的類型。
  12. 第12行代碼再次調用 BubbleSort 的 Sort() 方法進行排序操作。
  13. 第13行代碼輸出迭代次數。
  14. 第14行代碼再次調用了BubbleSort的GetDataString()方法輸出拓序后的數組。和上次排序不同,這里我們為GetDataString()賦值了一個分割符,數組的每個元素都使用“->”進行分割。你可能會奇怪,我們調用的都是GetDataString()方法,怎么一次可以使用參數一次又不可以使用參數?這個問題暫留著稍后回答。

  BubbleSort 類的確工作得很好,我們并不需要知道它是怎么實現這些功能的,我們只需要知道怎么使用就可以了。這些程序設計模式和現實世界很像。一個龐大的程序就好似現實世界,就以Windows操作系統為例,這么一個龐大的操作系統不可能是由一個程序員完成的,而是由數百個程序員共同設計而成。程序員們各自實現自己的那個模塊,根本不需要考慮其它程序員的代碼是如何編寫的。

轉載于:https://www.cnblogs.com/0754ydj/archive/2008/07/23/1249160.html

總結

以上是生活随笔為你收集整理的3.5.2 冒泡排序类的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。