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 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 数组常用的几种排序方式 -> 正文阅读

[数据结构与算法]数组常用的几种排序方式

冒泡排序

冒泡拍排序:俩俩捉对比较,大或小就换位置,一直比下去,最大或者最小的放最后

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
最后的结果是从小到大(从1开始排列)

注意:如果要从大到小排列的话,就把compare方法中的a>b的判断改为a<b
https://blog.csdn.net/weixin_49950087/article/details/122088742

选择排序

在这里插入图片描述
选择排序:
在数组中先找出最小数的索引,设一个变量保存下来,找到就进行交换
最小的数和数组的第一个数进行交换,
以此类推,再把数组其他数字最小数的索引找出,再和数组的第二位数进行交换。

举例:
例:5,4,7,2,9,1,6

第一趟排序 :1,4,7,2,9,5,6

第二趟排序: 1,2,7,4,9,5,6

第三趟排序: 1,2,4,7,9,5,6

第四趟排序: 1,2,4,5,9,7,6
…….

在这里插入图片描述

首先在未排序序列中找到最大(小)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。

不稳定的排序算法

不稳定的排序算法主要有以下四种:1、选择排序;2、快速排序;3、希尔排序(shell);4、堆排序

稳定的排序算法

稳定的排序算法有以下4种:1、冒泡排序;2、插入排序;3、归并排序 ;4、基数排序。

排序算法在很多领域得到相当地重视,尤其是在大量数据的处理方面。

注意:
排序算法稳定性
假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,r[i]=r[j],且r[i]在r[j]之前,而在排序后的序列中,r[i]仍在r[j]之前,则称这种排序算法是稳定的;否则称为不稳定的
https://baike.baidu.com/item/排序算法稳定性/9763250
在这里插入图片描述

exchange用于选择排序
maxIndex始终为0,也就是第一个,arr.lengrh-1为最后一个,arr.length-1-i为最后的数字-当前循环的第几个(倒数第二,倒数第三等等一直到0第一个)

快速排序

js的sort()配合自己的写法:
https://blog.csdn.net/qq_34595425/article/details/122851284

js中??法sort()为数组排序。sort()?法有?个可选参数,是?来确定元素顺序的函数。如果这个参数被省略,那么数组中的元素将按照ASCII字符顺序进?排序

注意:使用sort()需要自己写一个确认顺序的函数,作为参数使用

数组对象进?排序
sort?法接收?个函数作为参数,这?嵌套?层函数?来接收对象属性名,其他部分代码与正常使?sort?法相同.

递归排序(快速排序)

1.从数列中取出一个数作为参考,分区过程。
2.将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。
3.对左右区间重复第二步,直到各区间只有一个数。
简易的快速排序(不使用sort())
在这里插入图片描述
.concat()两个数组连接的方法
concat拼接前,leftright为什么要再递归一次quickSort
最后输出重点
注意:因为不递归最后输出左边右边数字 排序可能并不一定会是从小到大所以要递归quickSort

因为每次递归都会把 左和右合并后的数组 的第一个拿来做leader,每次都会出现一个新的左和右数组,并且数组的长度会比之前少一个(因为第一个被拿去做为leader)

直到递归到最后数组中只剩一个值,这个值被拿去做leader,左右数组中值一个不剩,导致左右合并后的数组为空,跳出递归

这样其实也是把所有的值都和leader对比了一遍(其实和leader对比后,分为两块后,,再合成一个新数组,返回,循环往复操作)

递归的操作其实就是分为两块后,再次一一对比了一遍

但这种写法 性能较差

二分法插入排序

算法
二分法排序一般指本词条
二分法插入排序,简称二分排序,是在插入第i个元素时,对前面的0~i-1元素进行折半,先跟他们中间的那个元素比,如果小,则对前半再进行折半,否则对后半进行折半,直到left<right,然后再把第i个元素前1位与目标位置之间的所有元素后移,再把第i个元素放在目标位置上。

算法思想简单描述:
二分法没有排序,只有查找。所以当找到要插入的位置时。移动必须从最后一个记录开始,向后移动一位,再移动倒数第2位,直到要插入的位置的记录移后一位。

复杂度分析
二分插入排序是稳定的与二分查找的复杂度相同;[1]
最好的情况是当插入的位置刚好是二分位置 所用时间为O(log2n);
最坏的情况是当插入的位置不在二分位置 所需比较次

插入排序

两个循环,内部循环,一个一个插入,只要上一个比大或者小就立即插入

插入排序,一旦你遇到比自己大或小的了,你就知道,后面都是比自己大或小的,就没必要再继续往前走了,现在坐下,当前元素就进入了有序序列

插入的每一次插,都不一定要轮一遍有序序列

function insertionSort(arr) {
    //外层循环:拿到标记的元素
    for (let i = 0; i < arr.length; i++) {
        let temp = arr[i];
        //内层循环:从后往前比较元素的大小
        let j = i;
        while (arr[j - 1] > arr[j] && j > 0) {
            arr[j] = arr[j - 1];
            j--;
        }
        //最后便将其插入进去即可
        arr[j] = temp;
    }
    return arr;
}

//测试一下
console.log(insertionSort([1, 3, 2, 6, 4, 5]));
  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-08-19 19:31:09  更:2022-08-19 19:34:19 
 
开发: 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 21:43:52-

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