演算法入門 java語言實現的插入排序小結

2021-07-30 06:15:53 字數 4220 閱讀 2278

public

class

insertsort

else

}*/

//可以簡化成這樣,注意是從i開始,而不是i+1.不要到最後乙個i+1越界。

for(

intj =i

;j>

0 && (

src[

j]<

src[j-

1]);

j--)

}

}

}

插入排序的乙個特性就是,中途可能會退出,不許要完全比較完未排序的序列。

時間複雜度:

最壞的情況就是到序的時候,插入第2個元素時要比較前1個元素,插入第3個元素時,要

比較前2個元素,……,插

入第n個元素,要

比較前 n - 1 個元素。因此,最壞情況下的比較次數是 1 + 2 + 3 + ... + (n - 1)也就是 n^2 / 2,所以最壞

情況下的複雜度為 o(n^2)。

最好情況下,陣列已經是有序的,每插入乙個元素,只需要比較前乙個元素,(比較完就退出了)因此最好情況下,

插入排序的時間復

雜度為o(n)

實測平均用時:

10000

name

:氣泡排序

1花費了

=73ms

name

:氣泡排序

2花費了

=67ms

name

:氣泡排序

3花費了

=58ms

name

:氣泡排序

4花費了

=58ms

name

:氣泡排序

5花費了

=60ms

平均:

51

50000

name

:氣泡排序

1花費了

=1684ms

name

:氣泡排序

2花費了

=1660ms

name

:氣泡排序

3花費了

=1486ms

name

:氣泡排序

4花費了

=1436ms

name

:氣泡排序

5花費了

=1482ms

平均:

1549

100000

name

:氣泡排序

1花費了

=6742ms

name

:氣泡排序

2花費了

=6700ms

name

:氣泡排序

3花費了

=5880ms

name

:氣泡排序

4花費了

=5888ms

name

:氣泡排序

5花費了

=5848ms

平均:

6211

總的看起來

還是比選擇排序用時長,比氣泡排序用時短。它能中斷所以比冒泡短,但是即使它可以中斷,但交換的

次數相對於選擇排序還是非常的多的,而一次的交換就意味著三次的賦值。

但是它可以改進,對插入排序進行改進,核心是利用每次需要交換元素時換成賦值的,把前面比較大的元素複製到它的後

乙個索引所在的位置(這個位置最開始的是要插入的那個元素,拿出來保留住),一直到最後,再把前面保留住的元素存入

到最後空出來的這個合適的位置。

改進後的**如下:

/**

* 改進後的插入排序。

* 核心改進思想:當發現比前面資料小的時候不是每次都要交換,而是通過賦值。

* 先把最初的元素的值取出來儲存,把當前位置往後賦值。迴圈到最後,再把取出來的數放入空出的位置。

* @param src 資料來源

*/

public

static

void

betterinsertsort

(int

src)

//迴圈完畢後,此時e>j或者j == 0了。一直比較的是j是當前索引,不符合的時候j-1賦值給j,然後j往前動1。

//此時還是比較當前所以,不符合那麼直接把拿出來的放這即可。

src[j

]=e;

}

}

10000

name

:氣泡排序

1花費了

=47ms

name

:氣泡排序

2花費了

=39ms

name

:氣泡排序

3花費了

=17ms

name

:氣泡排序

4花費了

=17ms

name

:氣泡排序

5花費了

=20ms

平均:

28

50000

name

:氣泡排序

1花費了

=949ms

name

:氣泡排序

2花費了

=934ms

name

:氣泡排序

3花費了

=414ms

name

:氣泡排序

4花費了

=418ms

name

:氣泡排序

5花費了

=421ms

平均:

627

100000

name

:氣泡排序

1花費了

=3892ms

name

:氣泡排序

2花費了

=3824ms

name

:氣泡排序

3花費了

=1708ms

name

:氣泡排序

4花費了

=1674ms

name

:氣泡排序

5花費了

=1710ms

平均:

2561

對比別的部落格的資料值可以看出來平均來說已經比插入快了,就是因為它有可能會中斷,不需要每次都查詢到未排

序序列的最後。

穩定性:穩定。

你想啊,只有小於的時候才進行插入,不然直接就break了。

演算法入門 java語言實現的氣泡排序小結

public class bubblesort 採用冒泡演算法,最外層從第乙個元素開始迴圈 for inti 0 i len i public static void main string args sort src for inti src 時間複雜度 最好的時間複雜度 正序 o n 好像是改進...

常用排序演算法Java語言實現

演算法原理 1.比較相鄰的元素。如果第乙個比第二個大,就交換他們兩個。2.對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。3.針對所有的元素重複以上的步驟,除了最後乙個。4.持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較。實現 ...

插入排序演算法 C語言實現

基本思想 每一步將乙個待排序的資料插入到前面已經排好序的有序序列中,直到插完所有元素為止。在有序陣列中插入當前元素key的時候,從有序陣列的最後乙個元素開始往前遍歷,如果a i key 則把a i 1 a i 即把比key大的元素以此朝後挪,給key值騰位置,一旦找到有序陣列中比key小的元素,那說...