【数据结构学习笔记】选择排序

【数据结构学习笔记】选择排序

参考电子书:排序算法精讲

算法原理

插入排序的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入

const nums = [6, 3, 9, 1, 4];

// 从第一个开始,因为 nums[0] 天然有序
for (let i = 1; i < nums.length; i++) {
    // 取出当前值
    const current = nums[i];
    let j = i - 1;
    // 找到符合调节的 j
    while(j >= 0 && nums[j] > current) {
        // 数据后移
        nums[j + 1] = nums[j];
        // 指针向前移
        j--;
    }
    // 插入当前值
    nums[j + 1] = current;
}

相关例题

LC 147.对链表进行插入排序

给定单个链表的头 head ,使用 插入排序 对链表进行排序,并返回 排序后链表的头

/**
 * Definition for singly-linked list.
 * function ListNode(val, next) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.next = (next===undefined ? null : next)
 * }
 */
/**
 * @param {ListNode} head
 * @return {ListNode}
 */
var insertionSortList = function(head) {

    // 展开链表
    const nums = [];
    let current = head;
    while(current) {
        nums.push(current.val);
        current = current.next;
    }

    // 从第一个开始,因为 nums[0] 天然有序
    for (let i = 1; i < nums.length; i++) {
        // 取出当前值
        const current = nums[i];
        let j = i - 1;
        // 找到符合调节的 j
        while(j >= 0 && nums[j] > current) {
            // 数据后移
            nums[j + 1] = nums[j];
            // 指针向前移
            j--;
        }
        // 插入当前值
        nums[j + 1] = current;
    }

    // 拼接链表
    const newHead = new ListNode();
    let newCurrent = newHead;
    for (const num of nums) {
        const node = new ListNode(num);
        newCurrent.next = node;
        newCurrent = newCurrent.next
    }

    return newHead.next;
};

相关推荐

  1. 数据结构学习笔记选择排序

    2024-03-15 22:28:03       17 阅读
  2. 数据结构学习笔记选择排序

    2024-03-15 22:28:03       26 阅读
  3. 数据结构选择排序

    2024-03-15 22:28:03       15 阅读
  4. 数据结构学习笔记】冒泡排序

    2024-03-15 22:28:03       21 阅读

最近更新

  1. electron通信与持久化存储

    2024-03-15 22:28:03       0 阅读
  2. Electron Forge 打包更改打包后图片

    2024-03-15 22:28:03       0 阅读
  3. 【ES】--Elasticsearch的高亮模式

    2024-03-15 22:28:03       0 阅读
  4. JVM专题九:JVM分代知识点梳理

    2024-03-15 22:28:03       0 阅读
  5. 谈谈检测浏览器类型

    2024-03-15 22:28:03       0 阅读
  6. npm 常用命令详解与实践

    2024-03-15 22:28:03       0 阅读
  7. node.js 面试题 1

    2024-03-15 22:28:03       0 阅读
  8. Eureka应用场景和优势

    2024-03-15 22:28:03       1 阅读

热门阅读

  1. 回调函数的介绍

    2024-03-15 22:28:03       21 阅读
  2. 【力扣二刷思路】DAY3

    2024-03-15 22:28:03       17 阅读
  3. 使用回溯法解决leetcode 1219

    2024-03-15 22:28:03       23 阅读
  4. 几种ADG搭建方式,汇总整理!

    2024-03-15 22:28:03       19 阅读
  5. 大量数据的优化之虚拟滚动和web workers

    2024-03-15 22:28:03       20 阅读
  6. 蓝桥集训之奶牛选美

    2024-03-15 22:28:03       19 阅读
  7. 乘积尾零 2018年第九届蓝桥杯省赛

    2024-03-15 22:28:03       21 阅读