生活随笔
收集整理的這篇文章主要介紹了
温故之 “快速排序”
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
快速排序是對冒泡排序的一種改進(jìn),第一趟排序時(shí)將數(shù)據(jù)分成兩部分,一部分比另一部分的所有數(shù)據(jù)都要小。然后遞歸調(diào)用,在兩邊都實(shí)行快速排序。
快速排序的思想
在數(shù)據(jù)集之中,選擇一個(gè)元素作為"基準(zhǔn)"(pivot)。所有小于"基準(zhǔn)"的元素,都移到"基準(zhǔn)"的左邊;所有大于"基準(zhǔn)"的元素,都移到"基準(zhǔn)"的右邊。對"基準(zhǔn)"左邊和右邊的兩個(gè)子集,不斷重復(fù)第一步和第二步,直到所有子集只剩下一個(gè)元素為止。舉例來說
現(xiàn)在有一個(gè)數(shù)據(jù)集{85, 24, 63, 45, 17, 31, 96, 50}
第一步,選擇中間的元素45作為"基準(zhǔn)"。(基準(zhǔn)值可以任意選擇,但是選擇中間的值比較容易理解。)
第二步,按照順序,將每個(gè)元素與"基準(zhǔn)"進(jìn)行比較,形成兩個(gè)子集,一個(gè)"小于45",另一個(gè)"大于等于45"。
第三步,對兩個(gè)子集不斷重復(fù)第一步和第二步,直到所有子集只剩下一個(gè)元素為止。 function quickSort(arr){if (arr.length <= 1){ return arr; } //如果數(shù)組<=1,則直接結(jié)束遞歸// 定義基準(zhǔn),并把基準(zhǔn)從原數(shù)組刪除var pivotIndex = Math.floor(arr.length / 2);var pivot=arr.splice(pivotIndex,1)[0];// 定義左右數(shù)組var left = [];var right = [];// 比基準(zhǔn)小的放在left,比基準(zhǔn)大的放在rightfor(var i=0; i < arr.length; i++){if(arr[i] <= pivot){left.push(arr[i]);}else{right.push(arr[i]);}}//遞歸,對左右兩個(gè)數(shù)組不停的按照基準(zhǔn)比較,知道子集都剩下一個(gè)為止return quickSort(left).concat([pivot],quickSort(right));}
轉(zhuǎn)載于:https://www.cnblogs.com/whkl-m/p/10671855.html
總結(jié)
以上是生活随笔為你收集整理的温故之 “快速排序”的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。