直接插入排序
為什麼叫直接插入排序呢?
書上定義:插入排序(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,...