js實現兩種實用的排序演算法——冒泡、快速排序
零:資料準備,給定陣列arr=[2,5,4,1,7,3,8,6,9,0];
一:冒牌排序
1思想:氣泡排序思想:每一次對比相鄰兩個資料的大小,小的排在前面,如果前面的資料比後面的大就交換這兩個數的位置
要實現上述規則需要用到兩層for迴圈,外層從第一個數到倒數第二個數,內層從外層的後面一個數到最後一個數
2特點:排序演算法的基礎。簡單實用易於理解,缺點是比較次數多,效率較低。
3實現:
var times=0;
var bubbleSort=function(arr){
for(var i=0;i<arr.length-1;i++){
for(var j=i+1;j<arr.length;j++){
if(arr[i]>arr[j]){//如果前面的資料比後面的大就交換
var temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
console.log("第"+(++times)+"次排序後:"+arr);
}
}
return arr;
}
console.log("The result is:"+bubbleSort(arr));
4效率:陣列長度10,排序次數45次。
二:快速排序
1思想:快速排序思想:先找到一個基準點(一般指陣列的中部),然後陣列被該基準點分為兩部分,依次與該基準點資料比較,如果比它小,放左邊;反之,放右邊。
左右分別用一個空陣列去儲存比較後的資料。最後遞迴執行上述操作,直到陣列長度<=1;
2特點:快速,常用。缺點是需要另外宣告兩個陣列,浪費了記憶體空間資源。
3實現:
var times=0;
var quickSort=function(arr){
//如果陣列長度小於等於1無需判斷直接返回即可
if(arr.length<=1){
return arr;
}
var midIndex=Math.floor(arr.length/2);//取基準點
var midIndexVal=arr.splice(midIndex,1);//取基準點的值,splice(index,1)函式可以返回陣列中被刪除的那個數arr[index+1]
var left=[];//存放比基準點小的陣列
var right=[];//存放比基準點大的陣列
//遍歷陣列,進行判斷分配
for(var i=0;i<arr.length;i++){
if(arr[i]<midIndexVal){
left.push(arr[i]);//比基準點小的放在左邊陣列
}
else{
right.push(arr[i]);//比基準點大的放在右邊陣列
}
console.log("第"+(++times)+"次排序後:"+arr);
}
//遞迴執行以上操作,對左右兩個陣列進行操作,直到陣列長度為<=1;
return quickSort(left).concat(midIndexVal,quickSort(right));
};
console.log(quickSort(arr));
4效率:陣列長度10,排序次數22次。三:總結
兩種方法各有優缺點,但是這兩種方法作為程式設計師必須掌握,因為一種是最基礎的,另一種是最常用的,面試或者日常都會碰到。
相關文章
- js數值排序中冒泡演算法的4種簡單實現JS排序演算法
- 七、排序,選擇、冒泡、希爾、歸併、快速排序實現排序
- 排序演算法之快速排序的實現排序演算法
- 快速排序三種實現排序
- 排序演算法-Java實現快速排序演算法排序演算法Java
- 快速排序的四種python實現排序Python
- 用 Java 實現的八種常用排序演算法Java排序演算法
- python實現氣泡排序、插入排序以及快速排序演算法Python排序演算法
- 快速理解7種排序演算法 | python3實現(排序演算法Python
- 快速排序的三種實現方法 (C++)排序C++
- 用JS實現氣泡排序和插入排序JS排序
- 快速排序演算法C++實現排序演算法C++
- php實現 歸併排序,快速排序PHP排序
- Python實現的快速排序Python排序
- JavaScript實現的7種排序演算法JavaScript排序演算法
- 九種排序演算法的 JavaScript 實現排序演算法JavaScript
- php實現4種排序演算法PHP排序演算法
- GO 實現快速排序Go排序
- 快速排序(java實現)排序Java
- 快速排序 java實現排序Java
- java實現快速排序Java排序
- Swift實現快速排序Swift排序
- **超詳細的**10種排序演算法原理及 JS 實現排序演算法JS
- js 實現堆排序JS排序
- Go實現氣泡排序和快速排序Go排序
- python實現常用五種排序演算法Python排序演算法
- 資料結構和演算法(Golang實現)(25)排序演算法-快速排序資料結構演算法Golang排序
- 用 Java 實現常見的 8 種內部排序演算法Java排序演算法
- 二十、快速排序演算法——JAVA實現(遞迴)排序演算法Java遞迴
- Array.sort 演算法原理(插入排序\快速排序in-place實現)演算法排序
- 幾種常用的排序演算法之JavaScript實現排序演算法JavaScript
- 幾種排序演算法的原理以及 Java 實現排序演算法Java
- python實現常見的五種排序演算法Python排序演算法
- 排序演算法:Java實現希爾排序排序演算法Java
- 排序演算法分析總結(附js實現)排序演算法JS
- Python八大演算法的實現,插入排序、希爾排序、氣泡排序、快速排序、直接選擇排序、堆排序、歸併排序、基數排序。Python演算法排序
- Swift實現八種經典排序演算法Swift排序演算法
- ts - 兩種方法實現忽略大小寫的字串排序字串排序
- 【演算法】Java實現七種常用排序演算法演算法Java排序