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...