八大排序算法-简单排序(3种)

javascript-选择排序

算法思想:简单选择排序是最简单直观的一种算法,基本思想为每一趟从待排序的数据元素中选择最小(或最大)的一个元素,并将其作为首元素(如果位置不对则交换),直到所有元素排完为止,简单选择排序是不稳定排序。

1、第一趟通过设置岗哨:min=0。
2、遍历下标为min+1----len-1位置与min位置的数比较。(如果小于岗哨则交换位置)
3、当轮循环结束之后,那这个变量存储的就是当前最小元素的下标。
4、第二趟岗哨加1,重复2、3、直到第len-1趟

function swap(array, i, j){//两个数调换
    var temp =array[j];
    array[j]=array[i];
    array[i]=temp;
};
function selectSort(arr){
     var min;
     var len=arr.length;
     for(var i=0;i<len;i++){
     	 min=i;
     	 for(var j=i+1;j<len;j++){
             if(arr[min]>arr[j]){
                 swap(arr,min,j);}
     	 }
     }
     return arr;
}
 var arr1 = [3, 5, 2, 4, 8, 6];
console.log(selectSort(arr1));//[ 2, 3, 4, 5, 6, 8 ]


jacascript-冒泡排序

算法思想:

冒泡排序(Bubble Sort)也是一种简单直观的排序算法。进行n趟扫描要排序的数列,每一趟比较确定最后一个位置的数,一次比较两个元素,如果他们的顺序错误就把他们交换过来。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。

算法步骤:

1、第一趟从下标为0开始比较与其相邻的元素。如果第一个比第二个大,就交换他们两个。

2)对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数,此时一趟结束确定最大的元素在最后的位置。

3)针对所有的元素重复1、2、的步骤,除了最后一个

4)持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

  function swap(array, i, j){//两个数调换
    var temp =array[j];
    array[j]=array[i];
    array[i]=temp;
};  
function bubbleSort(arr) {
    	var p = arr.length - 1;
    	var  flag;
    	for (var i = p; i > 0; i--) {
    		flag = 0;
    		//每趟的排序后将标识置0
    		for (var j = 0; j < p; j++) {
    			if (arr[j] > arr[j + 1]) {
    				swap(arr,j,j+1);
    				flag = 1;
    			}
    		}
    		if (flag = 0) break; //全程无交换时退出
    	}
    	return arr;
    }
    var arr1 = [3, 5, 2, 4, 8, 6];
    console.log(bubbleSort(arr1));``

jacascript-插入排序

主要算法思想:

插入排序是一种最简单直观的排序算法,它的工作原理是通过构建有序序列,对于每一个未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。

算法步骤:

1)将第一待排序序列第一个元素看做一个有序序列,把第二个元素到最后一个元素当成是未排序序列。

2)从头到尾依次扫描未排序序列,将扫描到的每个元素插入有序序列(从后到前扫描,如果当前元素小于(保证当前位置最大)扫描元素,则交换位置)的适当位置。(如果待插入的元素与有序序列中的某个元素相等,则将待插入元素插入到相等元素的后面。)

//从小到大
function insertSort(arr){
    var len=arr.length;
    var tmp;
    for(var i=1;i<len;i++){
         tmp=arr[i];
        for(var j=i;j>0&&tmp<arr[j-1];j--){  
            arr[j]=arr[j-1];
            arr[j-1]=tmp;
        }
    }
    return arr;
}
var arr1 = [3, 5, 2, 4, 8, 6];
console.log(insertSort(arr1));//[ 2, 3, 4, 5, 6, 8 ]
//方式2
function swap(array, i, j){//两个数调换
    var temp =array[j];
    array[j]=array[i];
    array[i]=temp;
};   
//从小到大
    function insertSort(arr){
        var len=arr.length;
        for(var i=1;i<len;i++){
            for(var j=i;j>0&&arr[j]<arr[j-1];j--){  
               swap(arr,j,j-1);
            }
        }
        return arr;
    }
    var arr1 = [3, 5, 2, 4, 8, 6];
    console.log(insertSort(arr1));//[ 2, 3, 4, 5, 6, 8 ]

猜你喜欢

转载自blog.csdn.net/qq_40151857/article/details/82828960