回顧幾種簡單的排序演算法

2021-09-24 03:57:37 字數 2051 閱讀 1685

第一次寫部落格希望能寫的好一點把~~~

回顧了一下幾種經典的排序演算法:氣泡排序、選擇排序、快速排序、插入排序。**

氣泡排序是一種簡單的排序演算法,它通過從前往後比較相鄰元素,使得較大的數向後「冒」。每一趟可以確定乙個最大的數。 相當於在末尾不斷排乙個反向的降序序列。

從前往後比較相鄰的元素,如果前乙個元素比後乙個元素大,則交換。

重複上一步,除了最後乙個元素(已經是最大的了)。

void

bubble_sort

(int data)

}}}

選擇排序是比較直觀的排序演算法,它的基本思想是:每次選擇乙個最小的數放到前面已經排好的序列的末尾。與氣泡排序相比,選擇排序像是在序列頭部逐步排乙個正向的公升序序列。

設立乙個標記k代表當前的位置,從前往後遍歷序列,當遍歷到第j個元素時,尋找j之後的序列中最小的元素,將其與第j個元素交換位置,直至結束。

void

selection_sort

(int data[n])}

int temp = data[i]

; data[i]

= data[index]

; data[index]

= temp;

}}

插入排序也是一種比較直觀的排序演算法,與選擇排序不同的是:

插入排序每次是直接拿後乙個元素,然後在前面尋找適合的位置進行插入。

而選擇排序則是在後面的序列中找最小的元素,然後放在前面序列的末尾。

那麼它的演算法思路也比較清晰了。

1.從第2個元素開始,向後遍歷直到結束,每遍歷乙個數轉第2步。記遍歷到的元素為x。

2.從第1個元素開始向後遍歷,找到第乙個比x大的元素y,將x插在y前面,返回1 。如果遍歷到x還沒有找到,則返回1。

因為不想寫陣列(只是不想搞後移元素這一步)所以用結構體鍊錶的形式寫了。

struct node//結構體定義,單向鍊錶

;void

init

(node * head)

//初始化鍊錶 帶頭節點!!

}void

insertion_sort

(node *head)

//具體的操作函式拉

pred_temp = pred_temp-

>next;

temp = temp-

>next;

} p =p-

>next;if(

!ju)pred_p = pred_p-

>next;

//當沒有找到時,

}}

簡單解釋一下標記ju的作用(大佬手下留情)

1.當在前面找到了比當前元素大的元素時,因為要將當前元素插入到前面,相當於刪除當前結點,且在前面對應位置插入乙個結點,所以這個pred_p是不變的。

2.當前面沒找到的時候,相當於當前元素的位置時適合的,所以,pred_p要隨著p一起前移。(當然如果你是用陣列做的,就不用搞這個拉,但鍊錶需要分類討論。)

快速排序的思想是分治,通過乙個基準元素將原序列分為兩個大小序列,然後遞迴對新的序列進行同樣的操作。

1.在序列中選擇乙個基準元素x,將比x小的元素放在x的前面,將比x大的元素放在x的後面。

2.分別將基準元素前後兩個序列執行第1步的操作。直至子串行長度為1或者0。

void

sort_quick

(int data,

int left,

int right)

data[left]

= temp;

left++

;//基準元素現在後移了一位}}

sort_quick

(data, left_t, left-1)

;//對左邊的序列遞迴

sort_quick

(data, left+

1, right)

;//對右邊的序列遞迴

}

上述**直接將序列第乙個元素作為基準。

如有錯誤,歡迎指正,謝謝!

幾種簡單的排序演算法

整理了一下幾種簡單的排序演算法,暫時先貼上演算法,以後有時間在乙個乙個注釋 參考 下面是 部分 include 演算法1 氣泡排序,時間複雜度o n 2 基本思想 從最後乙個數開始,每次相鄰兩個數字比較,較小數往上浮動 void bubblesort int a,int c 演算法2 選擇排序,時間...

幾種簡單的排序演算法

1 插入排序 直接插入排序 希爾排序 2 交換排序 氣泡排序 快速排序 3 選擇排序 直接選擇排序 堆排序 4 歸併排序 5 分配排序 基數排序 所需輔助空間最多 歸併排序 所需輔助空間最少 堆排序 平均速度最快 快速排序 不穩定 快速排序,希爾排序,堆排序。1.直接插入排序 1 基本思想 在要排序...

幾種簡單的排序演算法總結

注 1 以下所有排序演算法均按照從小到大的順序排列 2 以下演算法中用到的交換函式都一樣,如下 void swap int a,int i,int j 因此不在每個排序演算法中進行詳解 1.氣泡排序 1.最簡單的氣泡排序 思想 該排序演算法在排序的過程中總共進行n 1趟排序,每一趟排序都將當前的關鍵...