快速排序即找一基準,小於的放在左陣列,大於的放在右陣列,並連線,進行遞迴。
function
quicksort
(arr)
var num=math.
floor
(arr.length/2)
;//找到中間數的索引值,如果是浮點數,則向下取整
var newvalue=arr.
splice
(num,1)
;//找到中間數的值
var left=
,right=
;for
(var i=
0;i)else
}return
quicksort
(left)
.concat
(newvalue,
quicksort
(right));
//遞迴不斷重複比較,concat即連線陣列
} console.
log(
quicksort([
21,5,
45,12,
56,8]
));
堆排序類似完全二叉樹。利用堆頂元素最大的性質(但同行之間順序未排),將堆頂元素取出放入新陣列(迴圈時len–,視為新陣列)中,將堆底元素放置堆頂,並重構,迴圈。
var len;
function
buildmaxheap
(arr)
//對每乙個節點(非葉節點),做堆調整
}function
maxheapify
(arr, i)
if(right < len && arr[right]
> arr[largest])if
(largest != i)
}function
swap
(arr, i, j)
function
heapsort
(arr)
return arr;
}var arr =[46
,12,33
,72,68
,19,80
,33];
heapsort
(arr)
console.
log(
' after: '
+ arr)
;
計數排序要求資料集必須是已確定範圍的整數。
統計陣列中每個值為i的元素出現的次數,存入陣列c的第i項,填充陣列。
function
countingsort
(arr, maxvalue)
bucket[arr[i]]++
;}for(
var j =
0; j < bucketlen; j++)}
return arr;
}
桶排序利用了空間換時間的思想。即假設輸入資料服從均勻分布,將資料分到有限數量的桶裡,每個桶再分別排序,依次取出桶中資料。
/**
* 桶排序
* @param arr
* @param bucketsize
*/function
bucketsort
(arr, bucketsize =5)
/** * @description:
* @param arr=待排序資料
* @param bucketsize=桶大小
* @return:
*/function
createbucket
(arr, bucketsize)
else
if(arr[i]
> maxvalue)
}// 桶的個數
const bucketcount = math.
ceil
((maxvalue - minvalue)
/ bucketsize)
;// 建立桶,用二維陣列來儲存
const buckets =
;for
(let i =
0; i <= bucketcount; i++
)// 計算把資料放到哪個桶
for(
let i =
0; i < arr.length; i++
)return buckets;
}/**
* @description: 排序桶
* @param buckets
* @return:
*/function
sortbuckets
(buckets)
}return sortarray;
}/**
* @description: 插入排序
* @param arr
* @return: 排好序的arr
*/function
insertionsort
(arr)
else
} arr[j +1]
= key;
// 插入對應的位置
}return arr;
}// 隨機生成1000000個[1,100]區間內的整數
let arr1 = array.
from(,
item =>
(item = math.
floor
(math.
random()
* math.
floor
(100)+
1)))
;console.
time
("timer");
// console.log(`排序前的資料:$, 排序後的資料:$`);
bucketsort
(arr1,1)
;// 桶越小,排序越快,即桶個數越多,排序越快
console.
timeend
("timer"
);
基數排序即按照鍵值的每位數字分配桶。
先按照個位分配10個桶中,後按順序分到另一桶,再按照十位分配到10個桶中,進行迴圈。
var counter = ;
function radixsort(arr, maxdigit)
counter[bucket].push(arr[j]);
}var pos = 0;
for(var j = 0; j < counter.length; j++) }}
}return arr;
}
js十大排序演算法 氣泡排序
1 對於評述演算法優劣術語的說明 穩定 如果a原本在b前面,而a b,排序之後a仍然在b的前面 不穩定 如果a原本在b的前面,而a b,排序之後a可能會出現在b的後面 內排序 所有排序操作都在記憶體中完成 外排序 由於資料太大,因此把資料放在磁碟中,而排序通過磁碟和記憶體的資料傳輸才能進行 時間複雜...
十大排序演算法
1.非線性時間類排序 時間複雜度未突破 0 nlog 2n 不穩定的四個排序演算法 選擇排序 0 n2 希爾排序 0 n1.3 希爾排序實現python 快速排序 0 n log2 n 0 nlog 2n 0 nlog 2 n 快速排序實現c python 堆排序 0 n log2 n 0 nlog...
十大排序演算法
排序規則 從左至右依次增大 一 基於比較的排序演算法 插入排序 逐個遍歷未排序序列,將其在已排序序列中從右到左比較,直到遇到比自己小的數,然後將元素插入到那個數的後面,有序序列從左向右生長。選擇排序 在未排序序列中選擇最小的元素,將其插入到已排序序列的末尾,有序序列從左向右生長。氣泡排序 從左至右逐...