導航:首頁 > 源碼編譯 > 演算法考試可以直接用sort嗎

演算法考試可以直接用sort嗎

發布時間:2023-06-18 18:14:38

1. 集合類的sort方法採用的什麼排序演算法

諸如List<T>等泛型集合類,直接提供了sort()方法用於將集合中的元素進行排序。
但是,其前提是集合中存放的是可直接排序的基本類型,如List<int>, List<double>,如果
我們定義了一個自定義類型 Class MyClass,並創建一個自定義類型的集合如List<MyClass>,
那麼無參的sort()方法就不可用了,因為不知道如何排序了。這時就需要藉助:
IComparer 和 IComparable
首先,我們來看一下c#泛型List提供的Sort方法:

泛型List類的Sort方法有四種形式,分別是
1,不帶有任何參數的Sort方法----Sort();
2,帶有比較器參數的Sort方法 ----Sort(IComparer<T>)
3,帶有比較代理方法參數的Sort方法----Sort(Comparison<(Of <(T>)>))
4,帶有比較器參數,可以指定排序范圍的Sort方法----Sort(Int32, Int32 IComparer(T))

【解析:】第一種方法

使用這種方法不是對List中的任何元素對象都可以進行排序,List中的元素對象必須繼承IComparable介面,並且要實現IComparable介面中的CompareTo()方法,在CompareTo()方法中要自己實現對象的比較規則。

例如,Int32和Double都是實現了IComparable介面並重載了CompareTo方法的結構。(註:int和double都是Int32和Double的別名(alias))

【解析:】第二種方法

2,帶有比較器參數的Sort方法 ----Sort(IComparer<T>),

1)創建一個額外的比較器類:其實就相當於將排序功能中的比較操作,留個使用者來完成。這個比較操作必須在實現了IComparer介面的自定義比較類中完成;如:

class myComparer:IComparer<MyClass>

2)制定比較規則實現比較方法:因為介面中有一個用於比較的重載函數Compare,所在在比較器類中我們必須實現它,完成自己希望的比較。所謂自己希望的比較就是說自己實現自定義對象的比較規則,例如你知道自定義類MyClass中哪個屬性適合用來排序,那麼就選擇這個屬性作為整個自定義類對象的排序屬性,如該類中有年齡,學號,入學日期等屬性,你可以選擇年齡屬性作為排序屬性。如:

public class myComparer:IComparer<MyClass>
{
//實現按年齡升序排列
public int Compare(MyClass x, MyClass y)
{
return (x.age.CompareTo(y.age)); //age代表年齡屬性是整型,即其已支持CompareTo方法
}
}

3)使用比較器的排序方法調用:然後,在自定義類型的集合如List<MyClass> myList,上就可以進行sort排序了,如

myList.Sort(new myComparer());

【解析:】第三種方法
3,帶有比較代理方法參數的Sort方法----Sort(Comparison<(Of <(T>)>))
Comparison<(Of

<(T>)>是一種泛型委託。所以,需要編寫一個對象排序比較的方法,對List中的元素對象沒有特殊的要求,但在比較方法中需要實現
對象比較規則,這個方法實現後,就可以把這方名字作為參數委託給List的Sort方法,Sort方法在排序時會執行這個方法對List中的對象進行比較
需要編寫一個對象排序比較的方法,對List中的元素對象沒有特殊的要求,但在比較方法中需要實現對象比較規則,這個方法實現後,就可以把這方名字作為參
數委託給List的Sort方法,Sort方法在排序時會執行這個方法對List中的對象進行比較

【解析:】第四種方法
4,帶有比較器參數,可以指定排序范圍的Sort方法----Sort(Int32, Int32 IComparer(T))
對於第四排序方法,實際是第二種比較器排序的一個擴展,在指定排序比較器的同時,指定排序范圍,即List中准備排序的開始元素索引和結束元素索引

2. C++中關於泛型演算法sort()用法的問題C++達人進!

首先實現這個排序有兩種方式,一個自己定義一個返回值為bool的比較函數。
一個是自己定義類中的<操作函數。
第一種方式可以簡單寫為。
bool cmp(node x,node y)
{
return x.key1<b.key1;
}
sort(vec.begin,vec.end.cmp);
這種排序是從小到大的,也就是如果cmp(a,b)為真,則a一定在b的前面,如果
cmp(a,b)和cmp(b,a)都為false.的話,也就是a.key1==b.key1,則他們的先後順序則是不一定的,可能a在b前面,也可能b在a前面。
也就是說這種排序演算法是不穩定的。
第二種方式
struct node{
int key1;
int key2;
book operator <(const node &m)
{
return key1<m.key1;
}
}
這樣就不用自己定義比較函數。
對與sort()排序是不穩定的,正如前面說的,如果需要穩定排序的話,可以使用
stable_sort,它可以保證相等的元素原來的相對次序是不變的。

閱讀全文

與演算法考試可以直接用sort嗎相關的資料

熱點內容
dvd光碟存儲漢子演算法 瀏覽:757
蘋果郵件無法連接伺服器地址 瀏覽:963
phpffmpeg轉碼 瀏覽:672
長沙好玩的解壓項目 瀏覽:145
專屬學情分析報告是什麼app 瀏覽:564
php工程部署 瀏覽:833
android全屏透明 瀏覽:737
阿里雲伺服器已開通怎麼辦 瀏覽:803
光遇為什麼登錄時伺服器已滿 瀏覽:302
PDF分析 瀏覽:485
h3c光纖全工半全工設置命令 瀏覽:143
公司法pdf下載 瀏覽:382
linuxmarkdown 瀏覽:350
華為手機怎麼多選文件夾 瀏覽:683
如何取消命令方塊指令 瀏覽:350
風翼app為什麼進不去了 瀏覽:778
im4java壓縮圖片 瀏覽:362
數據查詢網站源碼 瀏覽:150
伊克塞爾文檔怎麼進行加密 瀏覽:892
app轉賬是什麼 瀏覽:163