排序算法-1
Posted webcyh
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了排序算法-1相关的知识,希望对你有一定的参考价值。
---恢复内容开始---
排序就是让数据按其关键字的某种次序排列起来,有一定的顺序这样方便于查找 是数据处理的重要操作而且方法很多应用广泛
排序又分为内排序和外排序
内排序:整张表放在内存当中处理 适合小表
外排序:排序过程需要内外表交换 适合于个数多不能一次放入内存处理的大表 内排序是外排序的基础
内排序又分为基于比较的排序(插入排序、交换排序、选择排序、归并排序)和非基于比较的排序(基数排序)
基于比较的排序新能由比较和交换的次数之和决定 如果要排序的关键字的顺序正好和要排序的顺序相同则称为正序否则为反序
内排序的是否稳定与排序后某些数据的相对序数是否仍然保持不变
---恢复内容结束---
排序就是让数据按其关键字的某种次序排列起来,有一定的顺序这样方便于查找 是数据处理的重要操作而且方法很多应用广泛
排序又分为内排序和外排序
内排序:整张表放在内存当中处理 适合小表
外排序:排序过程需要内外表交换 适合于个数多不能一次放入内存处理的大表 内排序是外排序的基础
内排序又分为基于比较的排序(插入排序、交换排序、选择排序、归并排序)和非基于比较的排序(基数排序)
基于比较的排序新能由比较和交换的次数之和决定 如果要排序的关键字的顺序正好和要排序的顺序相同则称为正序否则为反序
内排序的是否稳定与排序后某些数据的相对序数是否仍然保持不变
(function(Array) function Node(key,data) this.key = key; this.data = data; ; Array.prototype.MiSort=function() var i=1;//从第一个开始排序 var temp = null;//用于保存要交换的值 var j=0; var obj =null; for(var i = 1;i<this.length;i++) //如果有序区的最后的一个元素值大于无序区第一个值则进入排序 if(this[i-1].key>this[i].key) //保存无序区第一个值防止后边覆盖 temp = this[i].key;// obj = this[i]; //开始将有序区中比temp大的元素后移一位 j = i-1; //但元素值大于temp且还么到达负数的情况下进行移动 while(j!=-1&&temp<this[j].key) this[j+1] = this[j]; j--;//知道this[j]<=temp停止 this[j+1] = obj; Array.prototype.createS = function(arr) for(var i=0;i<arr.length;i++) //当前的对象上添加数据 this.push(new Node(arr[i],i)); )(Array); var arr = [12,32,11,3,65,100,4,7,9];//需要排序的数据 var stack = [];//用于创建结点的数组 //创建顺序表 stack.createS(arr); //开始排序 stack.MiSort(); //打印结果 console.log(stack);
算法分析:
有该算法可以看出有内外循环 内循环只有插入的元素的值小于有序区的元素情况下这才进行循环 最好的情况下就是插入元的元素刚好大于有序区最大元素 而且待插入区元素为有序的
时间复杂度为 n-1次比较 0次插入 所以为O(n)
最坏情况下就是: 每次插入都需要移动 i个元素而且进行 i+2次比较 时间复杂度为O(n^2)
以上是关于排序算法-1的主要内容,如果未能解决你的问题,请参考以下文章