複習總結 一些簡單的排序演算法

2021-07-04 07:18:31 字數 1234 閱讀 6965

1.  氣泡排序,氣泡排序屬於簡單排序的一種,也是大多數人學會的第乙個排序演算法,其基本思想是,從左到右掃瞄每個資料,跟它相鄰的比較,如果大小順序不對,就交換兩個資料的位置,這種演算法的最壞時間複雜度為n^2,屬於穩定排序的一種,然而,氣泡排序由於時間複雜度比較高,所以往往並不是最優演算法,然而,它有乙個別的演算法所不具備的優點就是,能夠方便的對鍊錶進行排序,該演算法的**如下:

void bubble_sort(int a,int n)}}

}

2. 插入排序,插入排序原理,就像我們平時打撲克,整理牌一樣,抓一張,跟手裡最右面一張比,比第一張小,第一張向右移動一下,然後再跟第二張比,找到合適位置,就將其插進去,這種演算法也是屬於簡單演算法的一種,最壞的時間複雜度為n^2 ,也是一種效率比較低的排序,然而,插入排序的意義,在我理解,應該是作為希爾排序的基礎,該演算法**如下:
void insert_sort(int elementtype,int n)

}}

3.選擇排序,選擇排序 的原理是,從i開始,到最後,找最小的,交換最小的和i位置的資料,i就是第一次迴圈的迴圈控制變數,這種排序最壞時間複雜度也是n^2,選擇排序是作為堆排序的基礎,由選擇排序可以演化為堆排序,實現**如下:

int scanformin(int elementtype, int start,int end)

} return result;

}void swap(int &a, int &b)

void selection_sort(int elementtype, int n)

}

希爾排序,希爾排序的原理是,先比較相隔n個的元素的大小,然後縮小n的值,再來一遍,比如,第一次,每個五個比一次,第二次,每隔三個比一次,最後一次,再比較相鄰兩個,比較相鄰兩個的時候,整個陣列已經基本有序了,當然理想情況下是基本有序,存在一種情況,前幾次排序並沒有使順序發生任何變化,白做了幾次迴圈,使得時間複雜度異常大,超過冒泡和插入,所以,sedgewick提出一種希爾增量,增量使用4^i-3*2^i+1這個公式 算出,使最壞時間複雜度降為

n^(4/3),而平均時間複雜度只是個理論值為:

n^(7/6)但是,這種希爾排序,在大量資料排序時,確實是效率相當高的,sedgewick增量希爾排序實現**如下:

int sedgewick = ;

void shell_sort(int elementtype, int n)

} }}

一些排序演算法的簡單實現

排序演算法.cpp 定義控制台應用程式的入口點。include stdafx.h include include include includeusing namespace std const int maxnum 24 void vecprint vectorconst num cout end...

排序 一些排序的總結

假定在待排序的記錄序列中,存在多個具有相同的關鍵字的記錄,若經過排序,這些記錄的相對次序保持不變,即在原序列中,ri rj,且ri在rj之前,而在排序後的序列中,ri仍在rj之前,則稱這種排序演算法是穩定的 否則稱為不穩定的。排序演算法如果是穩定的,那麼從乙個鍵上排序,然後再從另乙個鍵上排序,第乙個...

一些簡單的演算法

氣泡排序,比如你有五個數 3 4 2 1 0 其原理就是用沒個數和 其他數進行比較 下面我們來書寫每一輪的數值 第一輪 3 4 2 得出佇列 2 4 3 1 0 2 1 0 得出佇列 1 4 3 2 0 得出佇列 0 4 3 2 1 第二輪 4 3 得出佇列 0 3 4 2 1 3 2 1 得出佇列...