排序算法-交换排序(javascript)

Posted PeriHe

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了排序算法-交换排序(javascript)相关的知识,希望对你有一定的参考价值。

思想:比较相邻两个,逆序就交换,每次排序将最大的‘下沉’或最小的‘上浮’。

function bubbleSort(arr){
	const len = arr.length;
	let temp = 0;
	for(let i=0;i<len-1;i++){
		for(let j=0;j<len-i-1;j++){
			if(arr[j]>arr[j+1]){
				temp = arr[j];
				arr[j] = arr[j+1];
				arr[j+1] = temp;
			}
		}
	}
	return arr;
}

时间复杂度:

最好情况:正序。只需要一趟排序,进行n-1次比较,不移动记录。

最坏情况:逆序。只要n-1趟排序,比较次数为n^2/2,移动次数3n^2/2。

所以时间复杂度为O(n^2)

空间复杂度:

只在两个记录交换位置时需要一个辅助空间做暂存记录,所以空间复杂度为O(1)

特点:

1、是稳定排序。

2、可用于链式存储结构。

3、移动记录次数较多,算法平均时间性能比直接插入排序差。当初始记录无序,n较大时,此算法不适合。

附:改进后的冒泡

每次得到两个值,最大和最小值。

function bubbleSort(arr) {
    var low = 0;
    var high= arr.length-1; //设置变量的初始值
    var tmp,j;
    while(low<high){
        for(j=low;j<high;++j) //正向冒泡,找到最大
            if(arr[j]>arr[j+1]){
                tmp=arr[j];arr[j]=arr[j+1];arr[j+1]=tmp;
            }
        --high;                 //high前移一位
        for(j=high;j>low;--j) //反向冒泡,找到最小
            if(arr[j]<arr[j-1]){
                tmp=arr[j];arr[j]=arr[j-1];arr[j-1]=tmp;
            }
        ++low;                  //low后移一位
    }
    return arr;
}

  

 

以上是关于排序算法-交换排序(javascript)的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript实现常用的排序算法

用JavaScript实现排序算法

JavaScript实现排序算法及查找算法

冒泡排序之javascript

javascript之常用排序算法

JavaScript之算法设计思想