對經典排序演算法的理解

2021-07-24 19:00:44 字數 1064 閱讀 6683

直接插入排序

為什麼叫直接插入排序呢?

書上定義:插入排序(insertion sort )的基本思想是:每趟將乙個元素,按其關鍵字大小插入到它前面已經排序的子串行中,使得插入後的子串行仍然是排序的,依此重複,直到元素全部插入完畢

1、直接:沒有其他過程

2、插入:找到需要插入的位置,直接插入

乙個有n個數的陣列a  目標從小到大

int a =;
1、對於a0 a1,比較大小, 後者大換位置

2、對於 a0 a1 a2(此時a0 , a1 是有序的) 現假設  陣列前三個元素為

那麼問題來了, 如果還是按照 步驟1的方法,a2 a1 比較大小,交換位置 陣列為 ,很明顯不是正確的有序陣列, 應該再讓 a0,a1比較大小,交換位置 結果

3、對於 a0 a1 a2 a3(此時前三個元素是有序的) 假設 陣列前前四個元素為  ,  a4 a3 換位置 a3 a2 換位置 a2 a1 換位置 a0 a1 換位置

4、迴圈  直到最後乙個數

**如下

public void sort(int a ) else}}

}

但是這不是直接插入排序哈,這好像氣泡排序,我怎麼會先想到氣泡排序

暫時不管直接插入排序,我先來看氣泡排序(來看看我這種方法是不是冒泡)

氣泡排序

核心思想:氣泡排序(bubble sort)的基本思想是:比較相鄰兩個元素的關鍵字值,如果反序,則交換。若按公升序排列,每一趟被掃瞄的資料序列中最的元素交換到最後位置,就像氣泡從水裡冒出來一樣。

直接貼**

public void sort(int table) 

}} }

但好像的我自己臆造的演算法,相互交換的思想,但是外層不盡相同,我其實是外層運用了排序好的子串行,內層是冒泡,分析一下 空間複雜度和時間複雜度

經典排序演算法的經典問題

問題描述 乙個陣列只含有三種元素 0,1,2,不使用計數排序,將0放在1的左邊,2放在1的右邊。分析 1.可借鑑快排中劃分的思想。將陣列分為,arr,2.遍歷arr,當發現0時,0區向右擴,發現2時,2區向左擴,3.當前元素進入2區時,結束。vector sortthreecolor vector ...

js演算法 對 插入排序 的理解

1,演算法簡介 插入排序的工作原理就是將未排序資料,對已排序資料序列從後向前掃瞄,找到對應的位置並插入。插入排序通常採用佔位的形式,空間複雜度為o 1 因此,在從後向前掃瞄的過程中,需要反覆的把已排序的元素逐步向後挪位,為新插入元素提供插入的位置。2,演算法描述 1 從第乙個元素開始,該元素可以被認...

經典排序演算法

排序分為內部排序和外部排序,內部排序是指待排序的資料都是在記憶體中的,例如陣列 外部排序指待排序資源在記憶體外,例如對檔案的排序。此篇說的是內部排序。通俗地來說,內部排序就是將一堆資料按一定規則對它進行排序。排序又分為穩定排序和不穩定的排序,如果初始序列ai,ak有序 ai ak 排序後變成了ak,...