日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 前端技术 > javascript >内容正文

javascript

JS-排序详解:冒泡排序、选择排序和快速排序

發(fā)布時(shí)間:2025/5/22 javascript 56 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JS-排序详解:冒泡排序、选择排序和快速排序 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

JS-排序詳解-冒泡排序

說(shuō)明

  • 時(shí)間復(fù)雜度指的是一個(gè)算法執(zhí)行所耗費(fèi)的時(shí)間
  • 空間復(fù)雜度指運(yùn)行完一個(gè)程序所需內(nèi)存的大小
  • 穩(wěn)定指,如果a=b,a在b的前面,排序后a仍然在b的前面
  • 不穩(wěn)定指,如果a=b,a在b的前面,排序后可能會(huì)交換位置

JS冒泡排序

原理

依次比較相鄰的兩個(gè)值,如果后面的比前面的小,則將小的元素排到前面。依照這個(gè)規(guī)則進(jìn)行多次并且遞減的迭代,直到順序正確。

時(shí)間復(fù)雜度,空間復(fù)雜度,穩(wěn)定性

  • 平均時(shí)間復(fù)雜度O(n*n)
  • 最好情況O(n)
  • 最差情況O(n*n)
  • 空間復(fù)雜度O(1)
  • 穩(wěn)定性:穩(wěn)定

冒泡排序的寫法

var examplearr=[8,94,15,88,55,76,21,39]; function sortarr(arr){for(i=0;i<arr.length-1;i++){for(j=0;j<arr.length-1-i;j++){if(arr[j]>arr[j+1]){var temp=arr[j];arr[j]=arr[j+1];arr[j+1]=temp;}}}return arr; } sortarr(examplearr); console.log(examplearr);

解析

兩個(gè)循環(huán)
當(dāng)i=0的時(shí)候,里面的循環(huán)完整執(zhí)行,從j=0執(zhí)行到j(luò)=6,這也就是第一遍排序,結(jié)果是將最大的數(shù)排到了最后,這一遍循環(huán)結(jié)束后的結(jié)果應(yīng)該是[8,15,88,55,76,21,39,94]
當(dāng)i=1的時(shí)候,里面的循環(huán)再次完整執(zhí)行,由于最大的數(shù)已經(jīng)在最后了,沒(méi)有必要去比較數(shù)組的最后兩項(xiàng),這也是j<arr.length-1-i的巧妙之處,結(jié)果是[8,15,55,76,21,39,88,94]
說(shuō)到這里,規(guī)律就清楚了,每次將剩下數(shù)組里面最大的一個(gè)數(shù)排到最后面,當(dāng)?shù)谝粋€(gè)循環(huán)執(zhí)行到最后的時(shí)候,也就是i=6,此時(shí),j=0,只需要比較數(shù)組的第一和第二項(xiàng),比較完畢,返回。

?

?

JS-排序詳解-選擇排序

說(shuō)明

  • 時(shí)間復(fù)雜度指的是一個(gè)算法執(zhí)行所耗費(fèi)的時(shí)間
  • 空間復(fù)雜度指運(yùn)行完一個(gè)程序所需內(nèi)存的大小
  • 穩(wěn)定指,如果a=b,a在b的前面,排序后a仍然在b的前面
  • 不穩(wěn)定指,如果a=b,a在b的前面,排序后可能會(huì)交換位置

JS選擇排序

原理

選擇排序的寫法
var example=[8,94,15,88,55,76,21,39]; function selectSort(arr){var len=arr.length;var minIndex,temp;console.time('選擇排序耗時(shí)');for(i=0;i<len-1;i++){minIndex=i;for(j=i+1;j<len;j++){if(arr[j]<arr[minIndex]){minIndex=j;}}temp=arr[i];arr[i]=arr[minIndex];arr[minIndex]=temp;}console.timeEnd('選擇排序耗時(shí)');return arr; } console.log(selectSort(example));

解析

minIndex始終保存著最小值的位置的索引,隨著i的自增,遍歷的數(shù)組長(zhǎng)度越來(lái)越短,直到完成排序。

  

JS-排序詳解-快速排序

說(shuō)明

  • 時(shí)間復(fù)雜度指的是一個(gè)算法執(zhí)行所耗費(fèi)的時(shí)間
  • 空間復(fù)雜度指運(yùn)行完一個(gè)程序所需內(nèi)存的大小
  • 穩(wěn)定指,如果a=b,a在b的前面,排序后a仍然在b的前面
  • 不穩(wěn)定指,如果a=b,a在b的前面,排序后可能會(huì)交換位置

JS快速排序

原理

從數(shù)組中選定一個(gè)基數(shù),然后把數(shù)組中的每一項(xiàng)與此基數(shù)做比較,小的放入一個(gè)新數(shù)組,大的放入另外一個(gè)新數(shù)組。然后再采用這樣的方法操作新數(shù)組。直到所有子集只剩下一個(gè)元素,排序完成。

時(shí)間復(fù)雜度,空間復(fù)雜度,穩(wěn)定性

  • 平均時(shí)間復(fù)雜度O(nlogn)
  • 最好情況O(nlogn)
  • 最差情況O(n*n)
  • 空間復(fù)雜度O(logn)
  • 穩(wěn)定性:不穩(wěn)定

快速排序的寫法

var examplearr=[8,94,15,88,55,76,21,39]; function fastsort(arr){if(arr.length<2){return arr;}var left=[];var right=[];var pivotIndex=Math.floor(arr.length/2);var pivot=arr.splice(pivotIndex,1)[0];for(i=0;i<arr.length;i++){if(arr[i]<pivot){left.push(arr[i]);}else{right.push(arr[i])}}return fastsort(left).concat([pivot],fastsort(right)); } console.log(fastsort(examplearr));

解析

pivotIndex是將數(shù)組的長(zhǎng)度除2向下取整得到的一個(gè)數(shù)值,數(shù)組的長(zhǎng)度是不斷減半的,所以最后它的值為0
pivot是利用splice方法從數(shù)組里獲取一個(gè)基數(shù)

轉(zhuǎn)載于:https://www.cnblogs.com/wu-chao/p/8522598.html

《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結(jié)

以上是生活随笔為你收集整理的JS-排序详解:冒泡排序、选择排序和快速排序的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。