插入排序每次排一個(gè)數(shù)組項(xiàng)拓哟,類似平時(shí)抓牌的模式想许,假設(shè)第一項(xiàng)已經(jīng)是排好序的,接著第二項(xiàng)和第一項(xiàng)比較断序,如果第二項(xiàng)比第一項(xiàng)小流纹,則第二項(xiàng)插入第一項(xiàng),以此類推违诗,選中接下來(lái)的數(shù)漱凝,和前面已經(jīng)排好序的數(shù)進(jìn)行比較,一旦找到一旦這個(gè)數(shù)比待比較的數(shù)小较雕,則把這個(gè)數(shù)插入碉哑。
插入排序的代碼實(shí)現(xiàn):
function InsertSort() {
? ? const array = [];
? ? this.insert = function(item) {
? ? ? ? array.push(item);
? ? }
? ? this.toString = function() {
? ? ? ? return array.join();
? ? }
? ? this.insertSort = function() {
? ? ? ? const length = array.length;
? ? ? ? let temp,j;
? ? ? ? for(let i=1; i<length; i++) { // 從1開(kāi)始挚币,假定第一個(gè)數(shù)已經(jīng)排好序了
? ? ? ? ? ? j = i;
? ? ? ? ? ? temp = array[j];
? ? ? ? ? ? while(j>0 && array[j-1] > temp) {
? ? ? ? ? ? ? ? array[j] = array[j-1];
? ? ? ? ? ? ? ? j--;
? ? ? ? ? ? }
? ? ? ? ? ? array[j] = temp;
? ? ? ? }
? ? }
}
var arr = new InsertSort();
arr.insert(3);
arr.insert(13);
arr.insert(32);
arr.insert(23);
arr.insert(11);
arr.insert(8);
arr.insert(33);
arr.insert(28);
console.log(arr.toString()); // 3,13,32,23,11,8,33,28
arr.insertSort();
console.log(arr.toString()); // 3,8,11,13,23,28,32,33