Sort 排序類 1 基本排序

2021-10-04 10:29:57 字數 2424 閱讀 3918

排序的穩定性:

如果在序列中有兩個資料元素 r[i] 和 r[j],它們的關鍵字 k[i]== k[j],且在排序之前,物件 r[i] 排在 r[j] 前面;

如果在排序之後,物件 r[i]仍在物件 r[j] 的前面,則稱這個排序方法是穩定的,否則稱這個排序方法是不穩定的。

排序的重要指標:

排序的時間複雜度

排序的空間複雜度

排序演算法的可讀性與可維護性

多關鍵字與單關鍵字的排序無本質區別,只是在第一關鍵字相同時,再去比較第二關鍵字繼續排序,以此類推。

tip:

sort類中都提供了asc(bool型別)變數,可以選擇(true)公升序或降序(false)排序。預設為公升序

因為待排序的物件不一定為基本型別,所以使用模板技術,可以對支援比較與交換的資料物件進行排序。

下面是交換函式(模板)。

template

<

typename t >

static

void

swap

(t& a,t& b)

選擇排序的基本思想:

每次(例如第i次,i=0,1,…,n-2)從後面的n-i個待排資料元素中

選出最小(大)的元素,作為排序後的第i個元素

不多說,選擇排序看**應該就可以理解了,不理解就多看兩遍。

/*				選擇排序 o(n2)

不穩定排序

*/template

<

typename t >

static

void

select

(t arr,

int len,

bool asc =

true)}

if(spe != i)

}}

插入排序的基本思想:

當插入第i(i>=1)個資料元素時,前面的v[0],v[1],…'v[i-1]已經排好序;

這時,用v[i]的關鍵字與v[i-1],v[i-2],…,v[0]的關鍵字進行比較,

找到位置後將v[i]插入,原來位置上的物件向後順移。

流程簡述:

0:(外圍大迴圈 0-n)

1:拷貝當前待排序資料(待排序資料順序為從前向後),向前比較

2:若比較成立(逆序),當前被比較資料向後順移一位,記錄當前下標,向前比較,重複2

3:若比較不成立,記錄的下標與待排序資料的下標是否一致

4:不一致,將待排序資料插入至此

5:一致,不需要操作

/*				插入排序 o(n2)

穩定排序

*/template

<

typename t >

static

void

insert

(t arr,

int len,

bool asc =

true)if

(spe != i)

}}

氣泡排序的基本思想:

每次從後向前進行(假設第i次),j=n-1,n-2,…,i,

兩兩比較v[j-1]和v[j]的關鍵字;

如果發生逆序,則交換v[j-1]和v[j]

流程簡述:

0:(外圍大迴圈 0-n)

1:當前待排序資料(待排序資料順序為從後向前)向前比較

2:若比較成立(逆序),當前被比較資料與待排序資料交換位置

3:若比較不成立,不需要操作

4:重複1

tip:

採用exchange(bool型別)標記當前排序資料是否發生位置移動,如果沒發生,說明資料已經排好序,可以提前結束排序操作,提高效率

/*				氣泡排序 o(n2)

穩定排序

*/template

<

typename t >

static

void

bubble

(t arr,

int len,

bool asc =

true)}

}}

排序sort 排序用法

語法 array sort fun 引數fun可選。規定排序順序。必須是函式。注 如果呼叫該方法時沒有使用引數,將按字母順序對陣列中的元素進行排序,說得更精確點,是按照字元編碼的順序進行排序。如果想按照其他規則進行排序,就需要提供比較函式,該函式要比較兩個值,然後返回乙個用於說明這兩個值的相對順序的...

sort排序 1和1的區別

這個是sort方法裡的那個比較函式的特殊的返回值,比較函式的引數 a 和 b 代表陣列裡的兩個元素,如果 a 小於 b,排序後的陣列 a 在 b 前面,此時返回乙個負數 即上面的 return 1 如果 a 等於 b,排序後兩者位置不變,此時返回 0 即上面的 return 0 如果 a 大於 b,...

氣泡排序,選擇排序,sort排序

1.首先用scanf接收n個同學,然後在鍵盤上輸入n個同學的姓名和成績,空格分開。然後輸入1 2 3 序號分別選擇三種排序方式,回車結束。程式會自動根據你選擇的排序方式進行排序。2.首先用scanf接收有幾個數字,然後輸入n個無序的數。呼叫快速排序函式,得出結果。include include us...