排序算法

123 阅读2分钟

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;
}