js練習排序演算法(一)

2021-07-11 11:15:32 字數 2249 閱讀 5924

複習了一下資料結構的排序演算法,一年之前學的東西,現在拿來練習時,感慨挺多的。

寫在前面的話

可能馬上就要面試了,我還是有點慌的,今天看了資料結構的排序,並嘗試著用js來寫了一下,雖然沒有什麼實際的意義,但還是有點個人的理解和感悟和大家分享:有人說程式設計的世界就是資料結構和演算法,我覺得並不是。更確切的說,資料結構和演算法是思想和靈魂,語言就是表達和實現思想的工具。可能你熟悉了一種語言,你就會用這門語言固定的工具去套用那些思想來完成乙個任務,而換了乙個語言,你仍然會用你熟悉的語言的工具方法去實現乙個任務。

那現在有了飛機,你還用跑步去目的地麼?

了解乙個演算法的思想是很重要的,實現乙個演算法可能是很簡單的。一切所謂的偉大的前提,都是你敢想。

幾種排序的思想靈魂—–遍歷次數,結束條件

先說冒泡:一次排序之後,總會把最大的找出來。冒泡是相鄰的兩個比較,大小交換,標號下移,在重複此過程。結束條件:直到一次排序過程中沒有交換,說明已經有序,結束。

var bubblesort=function

(arry)}}

return arry;

};

外層迴圈是排序的次數,內層的迴圈是遍歷元素交換。

再說快排:理論上講,冒泡和快排都是一種借助了交換的方法。

快排的基本思想就是二分,找到乙個key作為基本點進行左右二分,這個key被形象的稱為「樞軸」。一次快排中,比key小的被分到一起成為新的快排物件,比key大的被分到一起成為新的快排物件,接下來。。。沒錯,接下來就是遞迴的過程了。

這裡,我先用原始的方法寫了一遍,原始方法是利用下標來完成移動的過程的。

function

qsort

(arry,i,j)//遞迴出口,i>j時,說明找到key的位置,結束

var low=i ;

var high=j;

var key=arry[i];

while(iwhile((i=key)) --j;//找位子

arry[i]=arry[j];

while((i//找位子

arry[j]=arry[i];

}arry[i]=key;//到這裡,就是一次二分,你可以把下面的遞迴注釋,來看看結果。

qsort(arry,low,i-1);//開始遞迴。

qsort(arry,i+1,high);

}var ay=[3,2,4,6,1,8,0];

qsort(ay);

alert(ay);

其實,我們再來理解一下,我把比key大的放一組,比key小的放一組,在對大的和小的做重複的操作,那麼,真正結束的條件應該是直到當你分的組裡面只有乙個元素,那就是key的時候,你就分完了,整體也就有序了。

js提供了豐富的資料操作,就是不想讓你把時間花在來回弄下標玩,把二分的思想最直接的表現出來,應該是這樣的**(我逛部落格時發現的!)

function

qsort

(arry)else

}return qsort(left).concat(key,qsort(right));//遞迴

}document.write(qsort([3,1,2,6,4]));

插入排序

每一次排序結束,之前的部分都會是有序的,這就意味著,你是在乙個有序的數列的基礎上排序的。你需要用你接下來的元素和這個有序的數列比較,並插入到應該在的位子,知道遍歷了所有的元素。

乙個要注意的地方就是當你知道了要插入的位子時的插入操作,可能簡單的想,就插入進去被,然後後面的依次後移,這種方法完全可以,你需要乙個新的陣列,向這個陣列中不斷的插入新的元素,來完成排序。

也可以不用,當你找到了要插入的位子時,以此時你的元素key位子為起點,向插入的位子,也就是向前位移,這是乙個元素覆蓋的過程,到你指定要插入的位子時,將此位置覆蓋為key,完成移動。

function

insetsort

(arry)

arry[j]=key;}}

}var ay=[3,2,4,6,1,8,0];

insetsort(ay);

alert(ay);

若有不足,希望指點提出,感謝各位。

JS排序演算法總結 (一)氣泡排序

目的 掌握氣泡排序的基本思想與過程 實現 時間複雜度與優化 1 基本思想與過程 從後向前兩兩比教,大數下沉,小數冒泡,一輪比較後,最小數的位置就排好了,在第乙個位置。重複上述過程,依次將第2.3.n 1個最小數排好位置。2 實現 function bubblesort arr console.log...

JS排序演算法

function insertsort arr endif status new date st ms return arr function shellsort arr while increment 1 status new date st ms return arr function shel...

排序演算法(JS)

自己整理一下資料結構的排序演算法,用js寫了一下,測試正確。插入排序 var table 32,26,87,72,26,17 for var i 0 i 0 temp0 alert i table 快速排序 快速排序是找出乙個元素 理論上可以隨便找乙個 作為基準 pivot 然後對陣列進行分割槽操作...