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

2021-10-23 02:55:35 字數 1972 閱讀 9125

演算法原理(從小到大排序為例):

將陣列分成兩部分,左邊部分為已排序部分,右邊部分為未排序部分

從未排序部分的右側開始比較遍歷,相鄰兩個元素比較,保證小元素在前,即如果num[j]>num[j+1],就做元素交換,否則不交換

交換到左右兩部分的邊界處,右邊第乙個元素即為右邊部分最小元素,左邊最後乙個元素即為左邊部分最大元素,由於左邊部分是右邊部分每次從小到大氣泡排序出來的,所以此時左邊部分加上右邊第乙個元素為有序部分,有序部分的陣列下標加一。

空間複雜度o(1),時間複雜度o(n^2),屬於穩定排序

**如下:

/**

* 氣泡排序:從小到大排序,從後往前遍歷

* space:o(1)

* time:o(n^2)

* 穩定排序

* @param nums

*/public

static

void

bubblesort

(int

nums)}}

private

static

void

swap

(int

num,

int i,

int j)

演算法原理(從小到大排序為例):

將陣列分成兩部分,左邊部分為已排序部分,右邊部分為未排序部分

將未排序部分的第乙個元素選為比較元素,在已排序部分進行比較遍歷,從右往左,從大到小比較遍歷,每次比較都將比較過的元素後移一位,直至 比較元素大於等於遍歷元素,此時將比較元素加入陣列

空間複雜度:o(1),時間複雜度:o(n^2),屬於穩定排序

**如下:

/**

* 插入排序:從小到大排序,從後往前遍歷

* space:o(1)

* time:o(n^2)

* 穩定排序

* @param nums

*/public

static

void

insertionsort

(int

nums)

else

} nums[j+1]

= tmp;

//要麼是遍歷到頭,要麼是找到位置

}}

在真實的使用中,插入排序比氣泡排序使用更多,因為在比較遍歷時,插入排序移動元素比氣泡排序更少,而真實使用場景中,排序數量一般不大,10,100,1000,複雜度分析中忽略的低階,係數,常數得考慮到。後面的選擇排序,本身是不穩定演算法,先天就落了下乘

//冒泡3次

private

static

void

swap

(int

num,

int i,

int j)

//插入1次

nums[j+1]

= nums[j]

;

演算法原理(從小到大排序為例):

將陣列分成兩部分,左邊部分為已排序部分,右邊部分為未排序部分

從右側未排序部分選擇最小的元素,和未排序部分的第乙個元素交換位置

空間複雜度:o(1),時間複雜度:最好/最壞/平均 都是 o(n^2),屬於不穩定排序

如陣列:5,4,5,2 在選擇排序時,2與第乙個5交換位置,相對順序就被破壞了

**如下:

/**

* 選擇排序:從小到大排序

* space:o(1)

* time:o(n^2)

* 不穩定排序

* @param nums

*/public

static

void

selectionsort

(int

nums)

}swap

(nums,i,minindex);}

}

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

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

演算法 插入選擇氣泡排序

演算法 排序 n 2 時間複雜度是o n 2 的排序有插入,選擇,冒泡。由於演算法思想比較簡單易懂,也不複雜。我們就簡單講講。插入排序 乙個元素是有序的,從第二個元素開始,依次將每個元素插入到前面序列的對應位置,最終整個序列有序。外層n 1趟。void insertsort int a,int n ...

冒泡,插入,選擇排序

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