概要
数组是我们前端编程中,经常需要操作的数据类型,下面来说说几种数组的排序方式
sort
js中用方法sort()为数组排序。可以传入一个比较的函数(函数做为参数),会改变原数组
arr.sort(function(v1,v2){
if(v1<v2)
return -1
else
return 1
})
冒泡排序
使用双层循环进行冒泡排序
for(var i=0; i<arr.length-1;i++){//排几次
for(var j=0;j<arr.length-i-1;j++){//每轮排序的项的索引
//如果前面比后面小,则交换2个数的位置
if(arr[j]<arr[j+1]){//比如第一轮的arr[0]和arr[1]
var temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
console.log(arr);
快速排序
设置一个函数,获取一个数组的中间值,与这个数进行比较,设置2个数组,比它小放入left数组,比它大,放入right;然后把left和right再放到这个函数中,直到数组个数为1(递归)
function quickSort(arr) {
if (arr.length <= 1) {
return arr;
}
const pivotIndex = Math.floor(arr.length / 2);
const pivot = arr.splice(pivotIndex, 1)[0];
const left = [];
const right = [];
for (let i = 0; i < arr.length; i++) {
if (arr[i] < pivot) {
left.push(arr[i]);
} else {
right.push(arr[i]);
}
}
return quickSort(left).concat([pivot], quickSort(right));
}
// 使用示例
const unsortedArray = [3, 6, 8, 10, 1, 2, 1, 4, 7, 9];
const sortedArray = quickSort(unsortedArray);
console.log(sortedArray); // 输出: [1, 1, 2, 3, 4, 6, 7, 8, 9, 10]
例如:
- API
- 支持模型类型
插入排序
●从第一个元素开始,该元素可以认为已经被排序;
●取出下一个元素,在已经排序的元素序列中从后向前扫描;
●如果该元素(已排序)大于新元素,将该元素移到下一位置;
●重复步骤3,直到找到已排序的元素小于或者等于新元素的位置;
●将新元素插入到该位置后;
●重复步骤2~5。
function insertionSort(arr) {
for (let i = 1; i < arr.length; i++) {
let key = arr[i];
let j = i - 1;
// 移动元素并查找插入点
while (j >= 0 && arr[j] > key) {
arr[j + 1] = arr[j];
j = j - 1;
}
arr[j + 1] = key;
}
return arr;
}
// 示例使用
const arr = [10, 2, 9, 3, 8, 4, 7, 5, 6];
const sortedArr = insertionSort(arr);
console.log(sortedArr); // 输出: [2, 3, 4, 5, 6, 7, 8, 9, 10]
选择排序
设置一个max索引为0,第一轮跟其他元素进行比较,确定最大的值,把索引赋值给max,然后将arr[max]和arr[0]交换。然后第二轮max为1,在跟他们元素比较,确定最大的值,把索引赋值给max,然后将arr[max]和arr[1]交换。
function selectionSort(arr) {
var len = arr.length;
var minIndex, temp;
for (var i = 0; i < len - 1; i++) {
minIndex = i;
for (var j = i + 1; j < len; j++) {
if (arr[j] < arr[minIndex]) {
minIndex = j;
}
}
temp = arr[i];
arr[i] = arr[minIndex];
arr[minIndex] = temp;
}
return arr;
}
// 示例使用:
var arr = [64, 25, 12, 22, 11];
console.log('Before sort:', arr); // 输出:Before sort: [64, 25, 12, 22, 11]
console.log('After sort:', selectionSort(arr)); // 输出:After sort: [11, 12, 22, 25, 64]