演算法筆記(二) 排序演算法(一)

2021-10-06 20:53:43 字數 1548 閱讀 8511

關於排序演算法我打算拆開幾個部分來講,在講解前先宣告幾點注意事項。

筆者使用的是c++,但是演算法部分盡量不過多的使用c++語言的特性。

文**現的swap,print_arry演算法在後文中直接呼叫,就不再贅述。

void

print_arry

(const vector<

int> array)

// 列印陣列

void

swap

(vector<

int>

&array,

int a,

int b)

// 交換陣列中的兩個數

void

swap

(int

&a,int

&b)// 交換陣列中的兩個數

在文**現vector容器,相當於動態建立的乙個陣列,&可以當成位址傳值

氣泡排序法在工程專案中已經不用,但是思路,時間複雜度,**的書寫還是需要理解的。

氣泡排序法是在乙個陣列中,相鄰的兩個陣列之間比較大小,按照比較的意願進行比較(本文採用從小到大)。

// 氣泡排序

void

bubble_sore

(vector<

int>

&array)

} cout <<

"----------氣泡排序----------"

<< endl;

print_arry

(array)

;}

在每一次外層for迴圈後,範圍內的最後乙個數都是經過比較的,並且被移動到了後面。

例如乙個陣列,經過一次外層迴圈後,陣列中的最大值20就被移動到了陣列的末尾,所以末尾的最後乙個數我們可以不用在比較,所以在外層迴圈中範圍減一。

選擇排序則是在乙個陣列中不斷的迴圈找出陣列中最小的,第二小的,第三小的。。。知道排完序。

如: 中最小的數是2,所以array[2]與array[0]互換,那麼我們第乙個數就可以不用再去看。找出第二小的數與array[1]進行互換,以此類推

// 選擇排序

void

select_sort

(vector<

int>

&array)}}

cout <<

"----------選擇排序----------"

<< endl;

print_arry

(array)

;}

插入排序是在遍歷的過程中不斷地跟前面的數進行比較,如果比前面的數小,則互換,互換後在跟前面的數進行比較。

// 插入排序

void

insert_sort

(vector<

int>

&array)

} cout <<

"----------插入排序----------"

<< endl;

print_arry

(array)

;}

演算法筆記02 排序演算法

1.歸併排序 歸併排序將整體陣列不斷分成更小的陣列,最終結果是所有陣列中只含有乙個元素,然後兩兩不斷合併。時間複雜度為o nlogn 比如現在有陣列 第一次劃分,第二次劃分,第三次劃分,開始兩兩合併排序 第一次合併,第二次合併,第三次合併,歸併排序中有著遞迴的思想,不斷將陣列劃分成更小的陣列,在這種...

演算法二 排序(1)

question1 2017年11月20日 description 給一組整數,按照公升序排序,使用選擇排序,氣泡排序,插入排序或者任何 o n2 的排序演算法。樣例 對於陣列 3,2,1,4,5 排序後為 1,2,3,4,5 1.氣泡排序 通俗地說,陣列的每個元素都是個泡泡,數字越大,就越輕,所以...

演算法筆記2 排序

1.選擇排序 首先,找到陣列中最小的那個元素,其次,將他和陣列第乙個元素交換位置,再次,在剩下的元素中找到最小的元素,將他和陣列的第二個元素交換位置。如此反覆,直到將整個陣列排序。不斷的選擇剩餘元素的最小值 2.插入排序 對部分有序陣列很有效 為了給要插入的元素騰出空間,我們需要將其餘所有元素在插入...