排序介紹(選擇 冒泡 快排 堆排序)

2021-07-28 11:37:07 字數 2490 閱讀 3813

問題描述:

排序問題:給出一組數字,要求按照數值的大小進行排序 :

例如 這組資料進行公升序的排列後的順序為;

氣泡排序

:是一種簡單的排序演算法,它實現的過程:不斷重複的走訪過要排列的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來,走訪數列的工作就是重複的進行,直到沒有再需要進行交換的的時候,就是最後序列的順序;

簡單來說:就是首先比較第1個和第2個數,小數放到前面,大數放到後面,然後比較第2 個數和第3個數,小數放前,大數放後.....以此類推,直到比完最後兩個數;

**如下:

選擇排序:

是一種簡單的排序方法,它的排序思路是:每一次從待排序的資料元素中選出最小(或者最大)的乙個元素,存放在序列的起始位置,直到全部待排序的資料元素都排完

**如下

快速排序 :

是一種對冒泡方法的改進,它的基本思路是:通過一趟排序,將要排序的數列分成兩個部分,其中一部分的所有資料都比另一部分的所有資料都要小,然後對這兩部分再進上述的分割,整個排序的過程可以遞迴進行,以此達到整個資料變成有序數列:

分析:對於給定的數列:a[5 7 6 2 4 1 8 3 9] 首先我們進行第一次分割;小的放到左面,大的放到右面;

取出 第乙個數5 , 設5的位置是第i個位置;第j個位置是最後乙個數的位置;

若a[i]<=5,那麼選擇a[i+1]進行比較;若a[j]>5 ,那麼選擇a[j-1]進行比較,若(i

下面我們來用快排走一下這個陣列:

原陣列順序:5 7 6 2 4 1 8 3 9     key=5(以5為判定標準)

第一次比較:5 7 6 2 4 1 8 3 9      9>5, 9的位置不動,j--;

第二次比較:3 7 6 2 4 1 8 5 9       3<5,換位置;

第三次比較:3 5 6 2 4 1 8 7 9        7>5,換位置

第四次比較:3 5 6 2 4 1 8 7 9        8>5 ,8的位置不動,j--;

第五次比較:3 1 6 2 4 5 8 7 9        1<5 ,換位置;

第六次比較:3 1 5 2 4 6 8 7 9         6>5 ,換位置;

第七次比較:3 1 4 2 5 6 8 7 9         4<5,換位置;

到此位置,以5 為分界線已經使得數列在5左面的數都是<5,右面的數》5,  第一趟排序就結束了;

按照這個方法遞迴繼續進行就可以拍好順序。

附 動態圖:

**如下:

堆排序所謂的堆排序就是利用堆這種結構(近似完全二叉樹),通過不斷的比較子葉與根的值得大小來進行變換子葉和根的值,直到根的值都大於子葉的值(或者根的值都小於子葉的值)這樣就完成了堆得排序;

這裡就不給我的**了,我在學堆排序的時候,看到了的海子的一篇對堆排序的部落格,對我理解堆排序的幫助很大,這裡推薦給大家:

排序 選擇 冒泡 快排

簡單介紹三種常見的排序方法 選擇 冒泡 快排。從大到小排列 選擇排序是在所有資料中先選擇第乙個資料作為最大值,依次和後面的每乙個資料比較,如果比最大值大,替換最大值並且記住索引,遍歷結束後,通過索引把最大值和第乙個資料替換。後面的資料依次執行一遍,就可以得到從大到小排列的資料了。如下 4 void ...

排序專題(桶排序,冒泡,快排,堆排序)

1.最簡單的排序 桶排序 簡化版 優點 快速,簡單 缺點 資料足夠大時,會造成嚴重的空間浪費 不能解決小數問題 理解 桶排序就是開乙個足夠大的陣列,陣列下標最大值 設為x,a x 要大於需要排序的資料最大值。設輸入為ni,則只要令a ni 就可以確定相同ni的個數,然後從從0到n,只要a ni 不為...

快排 堆排序

快速排序主要運用了二分的思想,每次選擇乙個基準元素,比基準元素打的元素都放在基準元素前面,比基準元素小的元素都放在基準元素後面,這樣不斷遞迴細分,完成排序。void quicksort int a,int l,int r if ia i a j i while ia i temp if ia j a...