//冒泡排序
function bubbleSort(arr)
{
var length=arr.length;
var temp;
for(var i=0;i<length-1;i++)
{
for(var j=0;j<length-1-i;j++)
{
if (arr[j] > arr[j+1]) { // 相邻元素两两对比
temp = arr[j+1]; // 元素交换
arr[j+1] = arr[j];
arr[j] = temp;
}
}
}
return arr;
}
//选择排序
function selectSort(arr)
{
var length=arr.length;
var temp,maxIndex;
for(var i=0;i<length-1;i++)
{
maxIndex=i;
for(var j=i+1;j<length;j++)
{
if(arr[maxIndex]<arr[j])
maxIndex=j
}
temp=arr[i];
arr[i]=arr[maxIndex];
arr[maxIndex]=temp;
}
return arr
}
//插入排序
function insertSort(arr)
{
var length=arr.length;
var preIndex,currentItem;
for(var i=0;i<length-1;i++)
{
preIndex=i;
currentItem=arr[i+1];
while(preIndex>-1&&arr[preIndex]>currentItem)
{
arr[preIndex+1]=arr[preIndex];
preIndex--;
}
arr[preIndex+1]=currentItem;
}
return arr;
}
//希尔排序
function shellSort(arr)
{
var length=arr.length;
//将数组元素易gap为单位进行分组再快速排序
//排序完之后将gap缩小为原来的一半,在排序,直到gap=1
//gap=1之后排序就完成了
for(var gap=Math.floor(length/2);gap>0;gap=Math.floor(gap/2))
{
//一共有length-gap个分组
for(var i=gap;i<length;i++)
{
//对每个分组进行快速排序
//每个分组元素间隔为gap
//让当前元素等于第gap个元素
//跟前面的插入排序是是反的
var currentItem=arr[i];
var preIndex=i;
while(preIndex-gap>0&&arr[preIndex-gap]>currentItem)
{
arr[preIndex]=arr[preIndex-gap];
preIndex-=gap;
}
arr[preIndex]=currentItem;
}
}
return arr;
}
//归并排序
function mergeSort(arr)
{
var length=arr.length;
var left=[];
var right=[];
if(length<2)
return arr;
var middle=Math.floor(length/2);
left=arr.slice(0,middle);
right=arr.slice(middle);
//注意有的时候数组的长度是奇数,右边的数组就会大一些
//会导致下面的归并之后右边数组还有一个元素
return merge(mergeSort(left),mergeSort(right));
}
function merge(left,right)
{
var res=[];
while(left.length&&right.length)
{
if(left[0]<right[0])
{
res.push(left.shift());
}
else
{
res.push(right.shift());
}
}
//将所有元素返回,解决数组是奇数的问题
return [...res,...left,...right]
}
//快速排序
var quickSort = function(arr) {
if (arr.length <= 1) {
return arr;
}
var pivotIndex = Math.floor(arr.length / 2);
//splice返回删除的元素
var pivot = arr.splice(pivotIndex, 1)[0];
var left = [];
var right = [];
for (var 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));
};
//堆排序
//计数排序
//桶排序
//基数排序
var arr=[1,5,6,8,4,2,9,3,4];
var bubbleArr=bubbleSort(arr)
console.log(`bubbleSort\n`);
console.log(bubbleArr)
var selectSortedArr=selectSort(arr)
console.log(`selectSort\n`);
console.log(selectSortedArr)
var insertSorted=insertSort(arr);
console.log(`insertSort\n`);
console.log(insertSorted)
console.log(`shellSort\n`);
console.log(shellSort(arr));
console.log(`mergeSort\n`);
console.log(mergeSort(arr));
console.log(`quickSort\n`);
console.log(quickSort(arr));
十大经典排序算法
最新推荐文章于 2023-11-22 08:16:08 发布