以下代碼都是JavaScript實作
1.冒泡排序
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
//排序的本質是比較和交換
//-----------冒泡排序-------begin---------//
//寫一個冒泡排序函式
function sort(arr){
for(var i = 0; i < arr.length; i++){
for(var j = 0; j < arr.length - 1 - i; j++){
if(compare(arr[j], arr[j + 1])){
exchange(arr, j, j + 1);
}
}
}
}
//寫一個比較函式
function compare(a, b){//升序
return (a > b) ? true : false;
}
//寫一個交換函式
function exchange(arr, a, b){
var temp = arr[a];
arr[a] = arr[b];
arr[b] = temp;
}
//-----------冒泡排序-------end---------//
//冒泡排序測驗
var arr = [5, 4, 3, 2, 1];
sort(arr);
console.log(arr);
</script>
</body>
</html>
冒泡排序.html
2.選擇排序
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
//排序的本質是比較和交換
//-----------選擇排序-------begin-------//
//寫一個選擇排序函式
function sort(arr){
//選擇排序,內層回圈,每次挑出一個最大的值,放到最后面
for(var i = 0; i < arr.length; i++){
var maxIndex = 0;//每次都假設最大值在arr[0]上
for(var j = 0; j < arr.length - i; j++){
if(compare(arr[maxIndex], arr[j])){
maxIndex = j;//替換最大值的索引
}
}
exchange(arr, maxIndex, arr.length - 1 - i);//每圈回圈后,把最大值放在最后
}
}
//寫一個比較函式
function compare(a, b){//升序
return (a < b) ? true : false;
}
//寫一個交換函式
function exchange(arr, a, b){
var temp = arr[a];
arr[a] = arr[b];
arr[b] = temp;
}
//-----------選擇排序-------end-------//
//選擇排序測驗
var arr1 = [5, 4, 3, 2, 1];
sort(arr1);
console.log(arr1);
</script>
</body>
</html>
選擇排序.html
3.簡單的快速排序
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
//排序的本質是比較和交換
//-----容易理解的快速排序-----begin---//
function quickSort(arr){
if(arr == null || arr.length == 0) return [];
//選出排頭兵
var header = arr[0];
var left = [];
var right = [];
for(var i = 1; i < arr.length; i++){
if(arr[i] > header){//比排頭兵大的放右邊
right.push(arr[i]);
}else{//比排頭兵小的放左邊
left.push(arr[i]);
}
}
//左邊和右邊再次快速排序
left = quickSort(left);
right = quickSort(right);
left.push(header);//把排頭兵加到左邊最后
return left.concat(right);//回傳左右分開后的陣列
}
//-----容易理解的快速排序-----begin---//
//容易理解的快速排序測驗
var arr2 = [9, 3, 5, 6, 2, 1, 7, 8, 0, 4];
console.log(quickSort(arr2));
</script>
</body>
</html>
簡單的快速排序.html
4.標準的快速排序
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
//排序的本質是比較和交換
//----標準的快速排序--------begin-----//
function standardQuickSort(arr, begin, end){
if(begin >= end) return;//若開始位置大于等于結束位置,直接回傳
var left = begin;//左 指向 頭
var right = end;//右 指向 尾
do{
do left++; while(left < right && arr[left] < arr[begin])//left右移一位,比較left和right的大小,以及比較arr[left]和arr[begin]的大小
do right--; while(right > left && arr[right] > arr[begin])//right左移一位,比較left和right的大小,以及比較arr[right]和arr[begin]的大小
if(left < right) exchange(arr, left, right);//交換左右的值,說明arr[left]>arr[begin]并且arr[right]<arr[begin];
}while(left < right)//當L < R時,一直執行回圈
var swapPoint = left == right ? right - 1 : right;//判斷arr[begin]要放在陣列的位置
exchange(arr, begin, swapPoint);//交換位置
standardQuickSort(arr, begin, swapPoint);//比arr[begin]小的重新排序
standardQuickSort(arr, swapPoint + 1, end);//比arr[begin]大的重新排序
}
function exchange(arr, a, b){
var temp = arr[a];
arr[a] = arr[b];
arr[b] = temp;
}
//----標準的快速排序--------end-------//
//標準的快速排序測驗
var arr3 = [9, 8, 7, 6, 5, 4, 3, 2, 1];
standardQuickSort(arr3, 0, arr3.length);
console.log(arr3);
</script>
</body>
</html>
標準的快速排序.html
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/58558.html
標籤:JavaScript
上一篇:js對日期進行升序排序
