排序算法-交换排序(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较大时,此算法不适合。

快速排序

戳:Here

时间: 2024-10-29 03:44:31

排序算法-交换排序(javascript)的相关文章

排序算法 基于Javascript

写在前面 个人感觉:javascript对类似排序查找这样的功能已经有了很好的封装,以致于当我们想对数组排序的时候只需要调用arr.sort()方法,而查找数组元素也只需要调用indexOf()方法或lastIndexOf()方法,我们忽略了其内部的实现.而今,js能开发的项目越来越庞大,对性能和效率要求也越来越高,虽然众多的库和框架也可以帮我们应付这些问题,但小编觉得框架过眼云烟,把握程序开发的基础,才能在飞速的更新换代中应对自如.因此我们不妨也研究一下这些算法,其中的思路有助于我们自身的提高

转载部长一篇大作:常用排序算法之JavaScript实现

注:本文是转载实验室同门王部长的大作,找实习找工作在即,本文颇有用处!原文出处:http://www.cnblogs.com/ywang1724/p/3946339.html#3037096.O(∩_∩)O~  知识产权归部长原文所有. 笔试面试经常涉及各种算法,本文简要介绍常用的一些算法,并用JavaScript实现. 1.插入排序 1)算法简介 插入排序(Insertion-Sort)的算法描述是一种简单直观的排序算法.它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫

常用排序算法之JavaScript实现

1.插入排序 1)算法简介 插入排序(Insertion-Sort)的算法描述是一种简单直观的排序算法.它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入.插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间. 2)算法描述和实现 一般来说,插入排序都采用in-place在数组上实现.具体算法描述如下: 从第一个元素开始,该元素可以认为已

六种排序算法的JavaScript实现

本文将介绍数据排序的基本算法和高级算法.这些算法都只依赖数组来存储数据. 数组测试平台 首先我们构造一个数组测试平台类 function CArray(numElements) { this.dataStore = []; this.numElements = numElements; this.toString = toString; this.clear = clear; this.setData = setData; this.swap = swap; } function setData

十大经典排序算法(Javascript版)

1 冒泡排序 时间复杂度 O(n²) .额外空间复杂度O(1). 1)算法步骤 比较相邻的元素.如果第一个比第二个大,就交换他们两个. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对.这步做完后,最后的元素会是最大的数. 针对所有的元素重复以上的步骤,除了最后一个. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较. 2)动图演示 3)什么时候最快 当输入的数据已经是正序时,时间复杂度 O(n) . 4)什么时候最慢 当输入的数据是反序时,时间复杂度 O(n²) 

选择排序---直接选择排序算法(Javascript版)

在要排序的一组数列中,选出最小(或者最大)的一个数与第1个位置的数交换:然后在剩下的数当中再找最小(或者最大)的与第2个位置的数交换,依次类推,直到第n-1个元素(倒数第二个数)和第n个元素(最后一个数)比较为止. function sort(elements){ for(i = 0; i < elements.length; i++){ //将当前位置作为关键位置(最小位置) var key = i; //找出剩余的数列中最小值的位置作为关键位置 for(var j = i + 1; j <

[Java]排序算法&gt;交换排序&gt;【冒泡排序】(O(N*N)/稳定/N较小/有序/顺序+链式)

1 冒泡排序 1.1 算法思想 交换排序的基本思想:两两比较待排序记录的关键字,一旦发现2个记录不满足次序要求时,则:进行交换,直到整个序列全部满足要求为止. 1.2 算法特征 属于[交换排序] 冒泡排序 快速排序 适用于[稳定性]:稳定 适用于[规模N]:较小 适用于[有序性]:有序 适用于[存储结构]:顺序存储 or 链式存储(二者均可) 相关口诀:[插冒归堆]好有序,[插冒]记录个数小,[插冒二选]时N方 1.3 算法实现 import java.util.Arrays; public c

常见的排序算法——交换排序

一.冒泡排序 #include <iostream> using namespace std; void print_array(int a[], int n) { for(int i = 0; i < n; i++) cout << a[i] << " " ; cout << endl; } void bubble_sort(int a[], int n) { for(int i = 0; i < n; i++) { for

排序算法的JavaScript实现

冒泡排序 let compare = (n1, n2) => n1 - n2; let bubbleSort = (arr, cmp = compare) => { for (let i = 0; i < arr.length; i++) { for (let j = i; j > 0; j--) { if (cmp(arr[j], arr[j - 1]) < 0) { [arr[j], arr[j - 1]] = [arr[j - 1], arr[j]]; } } } re