排序演算法 選擇排序和插入排序比較 待續未完

2021-07-11 04:57:57 字數 1401 閱讀 7898

排序演算法非常重要,在計算機中,計算機中排序資料占用的工作量有20%左右,所以研究排序演算法有助於我們提高工作效率。

排序演算法的效能由以下幾點決定

1.比較次數

2.交換次數

3.讀寫陣列次數

ps:對於不交換元素的演算法,我們會計算訪問陣列次數。

一.選擇排序

1.原理

找到陣列最小的那個數,和第乙個元素交換位置(如果第乙個數是最小,就和自己交換),然後,在剩下元素當中,找到最小的數,和第二個數交換。如此類推下去。

public

class selection}}

}

選擇排序演算法有兩個鮮明的特點

1.執行時間和輸入無關。

因為是為了找出最小的元素,掃瞄一遍陣列並不能為下一次掃瞄提供什麼資訊。排列乙個已有序或者是隨機的陣列時間都一樣長!。

2.資料移動是最少的。

每次交換,改變兩個陣列元素的值,n次交換-交換次數和陣列大小是線性關係。

3.原地操作是唯一的優點。

最差時間複雜度 о(n²)

最優時間複雜度 о(n²)

平均時間複雜度 о(n²)

二.插入排序

1.原理

舉個例子

2 3 4 1 5。

遍歷到1,比2小。插入到2前面。

1 2 3 4 5。

這種就是插入排序。

將每個元素插入到其他已經有序的適當位置中。

public

class insertion

}}

插入排序的特點

1.插入排序的時間取決於輸入元素的初始順序

2.對於一些部分有序的陣列,和小規模陣列,插入排序很高效。

ps:陣列中只有幾個元素位置不正確

乙個大的有序陣列接著乙個小陣列

陣列中每個元素距離它最終位置不遠

這三種情況插入排序很有效率

最差時間複雜度 o(n^2)

最優時間複雜度 o(n)

平均時間複雜度 o(n^2)

提高插入排序的效能

方法:在內迴圈中較大的元素都向右移動而不總是交換兩個元素(這樣訪問陣列的次數大幅度減少)

以下是提高插入排序的效能的演算法

public

class

insertionx()

}if(exchanges==0) return

false;

for(int i=2;iint j=i;

while(less(v,a[j-1]))

a[j]=v;}}

}

插入排序和選擇排序

對於隨機排序的無重複的陣列,插入和選擇的執行時間都是平方級別

排序演算法 插入排序和選擇排序

二者演算法分析 穩定性 時間複雜度 希爾排序 希爾排序是直接插入排序的優化,但當待排序數列很大時,預排序過程效率會降低許多,時間複雜度為o n2n2 空間複雜度 空間複雜度都為o 1 在進行排序時,會建立臨時常數個臨時變數用於控制下標 直接插入排序 void insertsort datatype ...

選擇排序和插入排序

選擇排序 時間複雜度 o n 2 額外空間複雜度o 1 選擇排序是從陣列的第乙個值即arr 0 開始,先假定當前值為最小值,記下index值,向後遍歷陣列,當 arr i 小於arr index 時,令index i 一直到arr length 1 獲得最小值的index然後與arr 0 交換,此時...

插入排序和選擇排序

排序 將一組雜亂無章的資料按照一定的規則有組織地排列起來。排序的穩定性 如果在排序中,存在前後相同的兩個元素的話,排序前和排序後他們的相對位置不發生變化。今天,先來學習插入排序和選擇排序 插入排序 直接插入排序 1 思想 每一步將乙個待排序的元其排序碼的大小,插入到前面已將排好序的一組元素的合適位置...