演算法 插入選擇氣泡排序

2021-06-25 23:40:41 字數 1160 閱讀 2114

演算法

排序(n^2)

時間複雜度是o(n^2)的排序有插入,選擇,冒泡。由於演算法思想比較簡單易懂,**也不複雜。我們就簡單講講。

插入排序

乙個元素是有序的,從第二個元素開始,依次將每個元素插入到前面序列的對應位置,最終整個序列有序。

外層n-1趟。

void insertsort(int a, int n)

a[j] = toinsert;

}}

平均情況;

wi :將元素插入到i個有序序列的對應位置,並形成新的有序序列。

那麼平均需要比較   (1 + 2 + 3 + ...+ i) * (1 / i) = (i + 1) / 2 次。

所以總共需要比較   w1 + w2 + w3 + ... + w(n-1) = (n^2 + n -2) / 4次。

所以時間 o(n^2)  空間o(1)。

選擇從n個數中選出最大的,並與最後乙個數交換;再從剩餘的n-1個數中選出最大的,與新的最後乙個數交換;知道只剩乙個數為止,則序列有序。

外層n-1趟。

void selectionsort(int a, int n)

}if(seq != i)

}}

顯然時間 o(n^2)  空間o(1)。

氣泡排序

掃瞄整個序列,如果前乙個數比後乙個數大,則交換。

具體做法,從第乙個數開始掃瞄,如果a[1] > a[2],則交換否則繼續。接著a[2] > a[3],則交換。依次類推掃瞄整個序列。

一趟下來最大的數被交換到最後乙個位置。

再從第乙個數開始掃瞄,類似的,只不過掃瞄n-1個數。因為最大數已經在最終有序的位置。

依次類推,一直進行n-1次。則整個序列有序。

void bubblesort(int a, int n)

}///如果再某趟排序中,沒有發生元素交換,則序列已有序。

if(!flag) break;

}}

注意,這加了乙個flag。來判斷一趟掃瞄過程中是否有元素交換,如果沒元素交換,則說明序列已經有序,那麼不用進行之後的掃瞄了。

顯然時間 o(n^2)  空間o(1)。

排序演算法 冒泡 插入 選擇排序

分析排序演算法從下列3個方面進行 排序演算法執行效率 時間複雜度 1 最好情況下時間複雜度 2 最壞情況下時間複雜度 3 平均情況時間複雜度 排序演算法記憶體消耗 空間複雜度,其中原地排序特指空間複雜度為o 1 的排序演算法 排序演算法穩定性 1 穩定的排序演算法 待排序的序列中存在值相等的元素,經...

排序演算法 冒泡,插入,選擇排序

演算法原理 從小到大排序為例 將陣列分成兩部分,左邊部分為已排序部分,右邊部分為未排序部分 從未排序部分的右側開始比較遍歷,相鄰兩個元素比較,保證小元素在前,即如果num j num j 1 就做元素交換,否則不交換 交換到左右兩部分的邊界處,右邊第乙個元素即為右邊部分最小元素,左邊最後乙個元素即為...

冒泡,插入,選擇排序

經典的排序演算法,此文章介紹三個 氣泡排序 它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。public void bubblesort int a while iswrap for int ...