IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> JavaScript实现多种排序算法(一) -> 正文阅读

[数据结构与算法]JavaScript实现多种排序算法(一)


一、冒泡排序

原理(由小到大排序):
两两比较相邻的元素,将数值大的元素交换到右边。
算法描述

  • 从第一个元素开始,比较第一个元素与第二个元素,如果元素1大于元素2,则交换元素值。
  • 继续比较第二个元素与第三个元素,按照同样的规则完成比较,至到比较到最后一个元素。
  • 注意:由于每轮比较结束以后,最后一位就是最大值,所以应当相应的减少比较的数量。

代码如下:

			let arr = [3,45,16,8,65,36,22,19,1,96,12,56,12,45]
			console.log(arr)
			let arr_length = arr.length
			let temp
			for(let i=0;i<arr_length;i++)
				for(let j=0;j<arr_length-i;j++){
					if(arr[j] > arr[j+1]){
						temp = arr[j]
						arr[j] = arr[j+1]
						arr[j+1] = temp
					}
				}
			console.log(arr)

二、选择排序

原理(由小到大排序):
将序列分为待排序和已排序,从待排序序列中寻找最小的元素,放到已排序序列的末尾。
算法描述

  • 第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置。
  • 然后再从剩余的未排序元素中寻找到最小(大)元素,放到已排序的序列的末尾。
  • 以此类推,直到全部待排序的数据元素的个数为零。

代码如下:

			let arr = [3,45,16,8,65,36,22,19,1,96,12,56,12,45]
			console.log(arr)
			let arr_length = arr.length
			let temp
			let minIndex = 0
			for(let i=0;i<arr_length-1;i++){
				minIndex = i
				for(let j=i+1;j<arr_length;j++){
					if(arr[minIndex] > arr[j]){
						minIndex = j
					}
				}
				temp = arr[i]
				arr[i] = arr[minIndex]
				arr[minIndex] = temp
			}
				
			console.log(arr)

三、插入排序

原理(由小到大排序):
对于待排序序列中的元素,每一个与前面已排序序列的最后一个元素开始向前进行比较,找到合适的位置插入。
算法描述

  • 假设前面n-1(其中n>=2)个数已经是排好顺序的。
  • 现在从待排序的序列中取出元素,在已排序序列中找到合适位置,使之插入第n个数,这个序列也成为已排序好的序列。
  • 按照此法对所有元素进行插入,直到整个序列排为有序。

代码如下:

			let arr = [3,45,16,8,65,36,22,19,1,96,12,56,12,45]
				console.log(arr)
				let arr_length = arr.length
				let temp
				for(let i=1;i<arr_length;i++){	
					let currentIndex = i
					for(let j=i-1;j >= 0;j--){
						if(arr[currentIndex] < arr[j]){
							temp = arr[currentIndex]
							arr[currentIndex] = arr[j]
							arr[j] = temp
							currentIndex = j	
						}
						
					}
				}	
				console.log(arr)

四、快速排序

原理(由小到大排序):
以待排序序列的第一个元素为中心点,将序列排列为,在中心点前面的数都比中心点小(或者相等),中心点后面的数都比中心点大(或者相等)。再将中心点前面的序列作为一个待排序序列1,中心点后面的序列作为待排序序列2,按照中心点的方法进一步划分。以此类推,完成排序算法。
算法描述

  • 在待排序的数列中,我们首先选择第 1个数字作为基准数(其实选择第几个并没有关系)。
  • 接下来把这个待排序的数列中小于基准数的元素移动到待排序的数列的左边,把大于基准数的元素移动到待排序的数列的右边。这时,左右两个分区的元素就相对有序了。
  • 接着把两个分区的元素分别按照上面两种方法继续对每个分区找出基准数,然后移动,直到各个分区只有一个数时为止。

代码如下:

function quickSort(arr,left,right){
				let tag = arr[left]
				let temp
				let start = left
				let end = right
				while(start < end){
					while(arr[end]>=tag && end>start)
						end--
					if(arr[end] <= tag){
						temp = arr[end]
						arr[end] = arr[start]
						arr[start] = temp
					}
					while(arr[start]<=tag && end>start)
						start++
					if(arr[start] >= tag){
						temp = arr[start]
						arr[start] = arr[end]
						arr[end] = temp
					}	
				}
				if(start > left) 
					quickSort(arr,left,start-1)
				if(end < right)
					quickSort(arr,end+1,right)
				console.log(arr)
				return arr
			}
			
			let arr = [3,45,16,8,65,36,22,19,1,96,12,56,12,45]
			console.log(arr)
			let sortedArr = quickSort(arr,0,arr.length-1)
			console.log(sortedArr)

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-08-08 13:36:58  更:2021-08-08 13:37:01 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 18:45:38-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码