ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

算法图解 - 第2章 选择排序

2020-06-04 18:52:35  阅读:156  来源: 互联网

标签:... arr 排序 元素 地址 链表 算法 图解


# 了解基本数据结构 - 数组和链表

数组:- 内存是连着的,元素不能随意添加存储。 
  - 优势:读取元素 (因为地址都是已知的)
  -运行时间: ...读取O(1) 地址已知,读取很快
                           ...插入O(n) 插入元素,需将后面的元素都向后或向前移动一位
                            ...删除O(n) 删除元素后,后面的元素都向前移

eg:(几个朋友相约一起看电影,坐会了后,又突然来了个朋友,可是连着的位置有人,就只能重新找个所有人能坐的位置了)

链表:- 链表中的元素可存储在内存的任何地方。
  - 链表的每个元素都存储了下一个元素的地址,从而使一系列随机的内存地址串在一起。 
  - 优势:插入元素 (因为地址只能找到了前一个,就能找到下一个)
  -运行时间:  ...读取O(n) 不知道地址
             ...插入O(1) 只需修改前一个元素指向的地址即可
                             ...删除O(1) 只需修改前一个元素指向的地址即可

eg:(寻宝游戏,到了一个目的后,有纸条写着下一个目的地的地址) --(相对于看电影时分开来坐)

访问方式:- 顺序访问 和 随机访问
  - 链表只支持顺序访问

 

# 选择排序 

每次选出剩余元素中最大的或者最小放在最终排序的对应位置
eg:歌曲排序,播放次数越多的靠前。 每次找到播放次数最多的放在表中。找第一个需n次,找第二个需n-1次,以此直到找到最后一个

#选择排序 总结
  - 需要检查的元素数越来越少
  - 随后检查的元素数依次为n - 1, n – 2, …, 2和1。平均每次检查的元素数为1/2 × n,因此运行时间为O(n × 1/2 × n)。
    但大O表示法省略诸如1/2这样的常数,因此简单地写作O(n × n)或O(n²)。
  - 运行时间: O(n*n) = O(n²)

#补充

基本思想:
  在a[1]-a[n-1]中选择最小的元素和a[0]交换;
  在a[2]-a[n-1]中选择最小的元素和a[1]交换;
  ……
  在a[i]-a[n-1]中选择最下的元素和a[i-1]交换;
  以此类推。。。。。。

算法步骤:
  循环比较:
  第一轮:将a[0]和a[1]-a[n-1]中的每个元素依次比较,若出现a[0]>a[j],则将两者进行交换;由此可以将数组中最小的元素放到a[0];
  第二轮:将a[1]和a[2]-a[n-1]中的每个元素依次比较。同样若出现a[1]>a[j],则将两者交换,由此将倒数第二小的元素放到a[1];
  依次类推。。。

/**
     * @method: selectionSort
     * @des: 选择排序  - 将数组按从小大大排序
     * @param {type}  
     * @return: 
     */
    function selectSort(arr) {
        var len = arr.length;
        var temp; 
         //比较的轮数
        for (var i = 0; i < len ; i++) {
             //每轮比较的次数
            for (var j = i + 1; j < len; j++) {
                // arr[i] > arr[j] 将其交换,将小的放在arr[i]
                if (arr[i] > arr[j]) {
                    temp = arr[i];
                    arr[i] = arr[j];
                    arr[j] = temp;
                }
                // arr[i] 
                console.log(temp,arr[i],arr[j]);
            } 
        }
        return arr;
    }
    var list = [6, 89, 30, 20, 8, 49, 5];
    console.log(selectSort(list));

 

标签:...,arr,排序,元素,地址,链表,算法,图解
来源: https://www.cnblogs.com/lingXie/p/13045357.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有