1.冒泡排序(n2)
冒泡排序算法的原理如下:
比较相邻的元素。如果第一个比第二个大,就交换他们两个。
对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
针对所有的元素重复以上的步骤,除了最后一个。
持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比比较
function bubbleSort(arr){
let len=arr.length;
for(let j=len-1;j>=0;j--){
for(let i=0;i<j;i++){
if(arr[i]>arr[i+1]){
let temp=arr[i+1];
arr[i+1]=arr[i];
arr[i]=temp;
}
}
}
}
let arr1=[2,4,6,1,4,7,3];
console.log(bubbleSort(arr1));
2.选择排序(n2)
首先从原始数组中找到最小的元素,并把该元素放在数组的最前面,然后再从剩下的元素中寻找最小的元素,放在之前最小元素的后面,知道排序完毕。
function selectionSort(arr){
let min,temp;;
for(let j=0;j<arr.length-1;j++){
min=j;
for(let i=min+1;i<arr.length;i++){
if(arr[min]>arr[i]){
min=i;
}
}
temp=arr[j];
arr[j]=arr[min];
arr[min]=temp;
}
}
3.插入排序(n2) 1、从数组第2个元素开始抽取元素。
2、把它与左边第一个元素比较,如果左边第一个元素比它大,则继续与左边第二个元素比较下去,直到遇到不比它大的元素,然后插到这个元素的右边。
3、继续选取第3,4,….n个元素,重复步骤 2 ,选择适当的位置插入。
function insertSort(arr){
for(let i=1;i<arr.length;i++){
let temp=arr[i];
let j=i;
while(arr[j-1]>temp&&j>0){
arr[j]=arr[j-1];
j--;
}
arr[j]=temp;
}
}
4.快速排序(nlogn)
var sortArray = function(nums) {
quickSort(nums,0,nums.length-1);
return nums;
};
var quickSort=function(nums,low,high){
if(low<high){
let index=partition(nums,low,high);
quickSort(nums,low,index-1);
quickSort(nums,index+1,high);
}
}
var partition=function(nums,low,high){
let basic=nums[low];
let start=low;
while(low<high){
while(low<high&&nums[high]>=basic) high--;
while(low<high&&nums[low]<=basic) low++;
if(low>=high) break;
swap(nums,low,high);
}
swap(nums,start,low);
return low;
}
function swap(nums,i,j){
let temp=nums[i];
nums[i]=nums[j];
nums[j]=temp;
}