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

2021-10-01 14:17:03 字數 1996 閱讀 9086

2) 穩定性

2. 氣泡排序

3. 插入排序

4. 選擇排序

5. 總結

對於演算法,我們首先考慮的就是其時間複雜度和空間複雜度。

(1) 時間複雜度

另外,由於序列順序不一定,不同情況下的時間複雜度也不同,所以我們還要考慮最好情況和最壞情況。

(2) 空間複雜度

這裡引入了乙個新的概念,我們把o(1)的空間複雜度的排序演算法稱為原地排序。

我們平時說的穩定性,是指波動程度很小。這裡舉個例子:

假設我們教務處的管理系統,期末排序學生成績。首先按照成績進行排名,之後按照學號大小進行二次排名。如果按照學號大小的排名不會打亂前面按照成績排名的結果,我們就說這個排序演算法是穩定的。

簡單點說,如果排序 2,3,6,1,8,6,3這個序列,排序之後第二位的3依然在最後一位的3前面,我們就說這個排序是穩定的。

a)// 這裡面,i的作用是標記已經排序好的元素數量

// 每次排序,j從0到n-1-i的位置裡面找到最大的元素,放到n-1-i的位置

// 整個過程就像冒泡一樣,每次將剩餘元素中最大的選出來,浮到最後

for(

int i =

0; i < n; i++)}

// 如果其中一次過程沒有元素交換,則說明整個陣列已經是有序的了,這時就可以退出了if(

!flag)

}}最好情況下,資料本來就是有序的,所以執行一次就退出了,時間複雜度為o(n)

最差情況下,資料要進行n次冒泡,時間複雜度為o(n^2)

沒有使用額外的空間,空間複雜度為o(1)

當兩個元素相等的時候,我們不會交換他們的順序,所以氣泡排序是穩定的

a)// i從1到n-1遍歷每乙個元素,插入到前面有序的集合中

for(

int i =

1; i < n; i++

)else

}// 插入資料

a[j +1]

= value;

}}最好情況,序列是有序的,只需要當前元素和他前乙個元素進行一次比較操作,時間複雜度為o(n)

最差的情況,序列是倒序的,每一次都要插入到第乙個位置,執行i-1次移動操作,時間複雜度為o(n^2)

沒有使用額外的空間,空間複雜度為o(1)

插入的時候,相等的情況,我們將後面的元素插入到前面的元素的後面,不影響之前的排序,所以插入排序是穩定的演算法。

// 將其放置到排序區最後乙個 (交換到未排序區第乙個)

if(minidx != i)

}}最好和最壞情況,每次都要查詢未排序區域中最小的元素,時間複雜度都為o(n^2)

沒有使用額外的空間,空間複雜度為o(1)

插入演算法每一次都要找未排序區域的最小值和前面元素交換位置,這樣破壞了穩定性。假設序列6,9,6,1,7,最小的1和第乙個6交換,就破壞了兩個6的先後順序,所以插入排序不是穩定演算法。

這三種排序演算法,可以說大學都會學過,算是開拓思維類的演算法,由於時間複雜度高,在實際開發中用的並不多。

Java排序演算法之氣泡排序 插入排序 選擇排序

一 前言 排序是日常中最常見的一種演算法,常見的演算法有 氣泡排序 插入排序 選擇排序 歸併排序 快速排序 計數排序 快速排序 基數排序 桶排序。那麼該怎樣分析和學習排序演算法呢?二 演算法的分析課 在上述的八種排序方法中,根據時間複雜度和是否基於比較可以為三種 排序演算法 時間複雜度 是否基於比較...

《演算法》選擇排序 插入排序 氣泡排序

選擇排序,演算法 p156 package algorithm public class selection p156 for int i 0 i n i public static void main string args test.sort a 思路 將第乙個元素與剩餘所有元素相比,如果有比第...

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

氣泡排序演算法 氣泡排序是最簡單的排序演算法之一。此演算法具有二次方程增長階,因此僅適合排序小列表。氣泡排序演算法是階o n 2 的演算法 package com.szy.structure.sort public class bubblesort system.out.println 排序前 fo...