氣泡排序,插入排序,插入排序 資料結構與演算法之美

2021-09-10 14:29:27 字數 1494 閱讀 4136

氣泡排序

氣泡排序只會操作相鄰的兩個資料。每次冒泡操作都會對相鄰的兩個元素進行比較,看是否滿足大小關係要求,如果不滿足就讓它倆互換。

穩定性:氣泡排序是穩定的排序演算法。

空間複雜度:氣泡排序是原地排序演算法。

時間複雜度:

最好情況(滿有序度):o(n)。

最壞情況(滿逆序度):o(n^2)。

package com.arithmetic;

public class maopao

}} system.out.print("排序後");

this.print(array);

}public void print(int array) {

for(int i=0;i在排序函式中,實際上就是兩個巢狀迴圈,裡面的迴圈是為了將上下兩個進行大小比較,並將大的移到下面,外面的迴圈是為了保證從上到下每一位都相互比較過了。

插入排序將陣列資料分成已排序區間和未排序區間。初始已排序區間只有乙個元素,即陣列第乙個元素。在未排序區間取出乙個元素插入到已排序區間的合適位置,直到未排序區間為空。

空間複雜度:插入排序是原地排序演算法。

時間複雜度:

最好情況:o(n)。

最壞情況:o(n^2)。

平均情況:o(n^2)(往陣列中插入乙個數的平均時間複雜度是o(n),一共重複n次)。

穩定性:插入排序是穩定的排序演算法。

package com.arithmetic;

public class charu {

public void sort(int array) {

system.out.println("排序前");

this.print(array);

int p;

for(int j=1;j=0;i--) {

//i是j的倒序開始

if(array[flag]=0 && current 整個插入排序的基礎就是保證有序,所以在這樣的情況下,由後向前進行對比,比較完判斷是插入還是繼續移動,因為在一開始就規定了有序所以插入的時候邏輯就很清晰

選擇排序將陣列分成已排序區間和未排序區間。初始已排序區間為空。每次從未排序區間中選出最小的元素插入已排序區間的末尾,直到未排序區間為空。

空間複雜度:選擇排序是原地排序演算法。

時間複雜度:(都是o(n^2))

1. 最好情況:o(n^2)。

2. 最壞情況:o(n^2)。

3. 平均情況:o(n^2)。

穩定性:選擇排序不是穩定的排序演算法。

package com.arithmetic;

public class xuanze {

public void sort(int array) {

system.out.print("排序前");

this.print(array);

for(int j=0;j選擇排序也是需要進行兩個for的巢狀,內部巢狀是為了找出目前最小的數字,然後將其新增到有序陣列中,外部迴圈是為了遍歷一遍原陣列,挨個找出最小數字

氣泡排序,插入排序

前提 void x sort elementtype a,int n 大多數情況下,為簡單起見,討論從小大的整數排序 n是正整數 只討論基於比較的排序 有定義 只討論內部排序 穩定性 任意兩個相等的資料,排序前後的相對位置不發生改變 沒有一種排序是任何情況下 都表現最好的 氣泡排序 void bub...

氣泡排序 插入排序

學習思路 思路講解 實現 1 通過雙重迴圈,相鄰兩個資料做對比,通過位置交換使其變得有序 2 時間複雜度 分析 解釋 外部迴圈從0開始i 內部迴圈從0開始j,完整迴圈後會將本次最大值放入陣列最後,下次迴圈可忽略相應的尾部資料 length i 1 重複1 2步即可完成排序 實現 public cla...

插入排序 折半插入排序

折半插入排序 binary insertion sort 直接插入排序採用順序查詢法查詢當前記錄在已排好序的序列中插入位置,這個 查詢 操作可利用 折半查詢 來實 現,由此進行的插入排序稱之為折半插入排序 binary insertion sort 演算法思想 1 將待排序的記錄存放在陣列r 1.n...