js排序介绍

排序学习总结

1.冒泡法

总结:第一种冒泡方法:第一个位置的数字和后面相连位置的数字比较。只要后面位置的数字更小,就进行数据交换,再第二个位置数字和其后面相连位置的数字比较,只要后面位置的数字更大,就进行数据交换。依次比较到最后一个数字。

原始待排序数组| 6 | 2 | 4 | 1 | 5 | 9 |

第一趟排序(外循环)

第一次两两比较6 > 2交换(内循环)

交换前状态| 6 | 2 | 4 | 1 | 5 | 9 |

交换后状态| 2 | 6 | 4 | 1 | 5 | 9 |

第二次两两比较,6 > 4交换

交换前状态| 2 | 6 | 4 | 1 | 5 | 9 |

交换后状态| 2 | 4 | 6 | 1 | 5 | 9 |

第三次两两比较,6 > 1交换

交换前状态| 2 | 4 | 6 | 1 | 5 | 9 |

交换后状态| 2 | 4 | 1 | 6 | 5 | 9 |

第四次两两比较,6 > 5交换

交换前状态| 2 | 4 | 1 | 6 | 5 | 9 |

交换后状态| 2 | 4 | 1 | 5 | 6 | 9 |

第五次两两比较,6 < 9不交换

交换前状态| 2 | 4 | 1 | 5 | 6 | 9 |

交换后状态| 2 | 4 | 1 | 5 | 6 | 9 |

第二趟排序(外循环)

第一次两两比较2 < 4不交换

交换前状态| 2 | 4 | 1 | 5 | 6 | 9 |

交换后状态| 2 | 4 | 1 | 5 | 6 | 9 |

第二次两两比较,4 > 1交换

交换前状态| 2 | 4 | 1 | 5 | 6 | 9 | 
交换后状态| 2 | 1 | 4 | 5 | 6 | 9 |

第三次两两比较,4 < 5不交换

交换前状态| 2 | 1 | 4 | 5 | 6 | 9 | 
交换后状态| 2 | 1 | 4 | 5 | 6 | 9 |

第四次两两比较,5 < 6不交换

交换前状态| 2 | 1 | 4 | 5 | 6 | 9 |

交换后状态| 2 | 1 | 4 | 5 | 6 | 9 |

第三趟排序(外循环)

第一次两两比较2 > 1交换

交换后状态| 2 | 1 | 4 | 5 | 6 | 9 |

交换后状态| 1 | 2 | 4 | 5 | 6 | 9 |

第二次两两比较,2 < 4不交换

交换后状态| 1 | 2 | 4 | 5 | 6 | 9 | 
交换后状态| 1 | 2 | 4 | 5 | 6 | 9 |

第三次两两比较,4 < 5不交换

交换后状态| 1 | 2 | 4 | 5 | 6 | 9 | 
交换后状态| 1 | 2 | 4 | 5 | 6 | 9 |

第四趟排序(外循环)无交换

第五趟排序(外循环)无交换

排序完毕,输出最终结果1 2 4 5 6 9

function(array) {    var i = 0,    len = array.length,    j, d;    for (; i < len; i++) {        for (j = 0; j < len-i; j++) {            if (array[j] > array[j+1]) {                d = array[j];                array[j] = array[i];                array[i] = d;            }        }    }    return array;}

2.选择排序

总结:首先假设第一个数字是最小值,记录下最小值和最小值的下标。第一个位置的数字和后面所有的数字依次比较。只要后面位置的数字更小,就进行数据交换。所以每一趟外循环后,第一个数字一定是余下数字的最小值。

原始待排序数组| 6 | 2 | 4 | 1 | 5 | 9 |

第一趟排序(外循环)

第一次两两比较6 > 2交换(内循环)

交换前状态| 6 | 2 | 4 | 1 | 5 | 9 |

交换后状态| 2 | 6 | 4 | 1 | 5 | 9 |

第二次两两比较,2< 4不交换

交换前状态| 2 | 6 | 4 | 1 | 5 | 9 |

交换后状态| 2 | 6 | 4 | 1 | 5 | 9 |

第三次两两比较,2> 1交换

交换前状态| 2 | 6 | 4 | 1 | 5 | 9 |

交换后状态| 1| 6 | 4 | 2 | 5 | 9 |

第四次两两比较,不交换

第五次两两比较,不交换

第二趟排序(外循环)

第一次两两比较6 > 4交换

交换前状态| 1 | 6 | 4 | 2 | 5 | 9 |

交换后状态| 1 | 4 | 6 | 2 | 5 | 9 |

第二次两两比较,4 > 2交换

交换前状态| 1 | 4 | 6 | 2 | 5 | 9 |
交换后状态| 1 | 2 | 6 | 4 | 5 | 9 |

第三次两两比较,不交换

第四次两两比较,不交换

第三趟排序(外循环)

第一次两两比较6 > 4交换

交换后状态| 1 | 2 | 6 | 4 | 5 | 9 |

交换后状态| 1 | 2 | 4 | 6 | 5 | 9 |

第二次两两比较,不交换

第三次两两比较,不交换

第四趟排序(外循环)

第一次两两比较6 > 4交换

交换后状态| 1 | 2 | 4 | 6 | 5 | 9 |

交换后状态| 1 | 2 | 4 | 5 | 6 | 9 |

第二次两两比较,不交换

第五趟排序(外循环)无交换

排序完毕,输出最终结果1 2 4 5 6 9

function(array) {    var i = 0,    len = array.length,    j, d;    for (; i < len; i++) {        for (j = i+1; j < len; j++) {            if (array[i] >array[j]) {                d = array[j];                array[j] = array[i];                array[i] = d;            }        }    }    return array;}

注:一开始我把冒泡排序与选择排序混淆了。

3.快速排序

总结:假设要排序的数组是A[0]……A[N],首先任意选取一个数据(通常选用第一个数据)作为关键数据,然后将所有比它的数都放到它前面,所有比它大的数都放到它后面,这个过程称为快速排序。快速排序的算法是: 
1)设置两个变量I、J,排序开始的时候I:=0,J:=N;
2)以第一个数组元素作为关键数据,赋值给X,即X:=A[0];
3)从J开始向前搜索,即由后开始向前搜索(J:=J-1),找到第一个小于X的值,两者交换; 
4)从I开始向后搜索,即由前开始向后搜索(I:=I+1),找到第一个大于X的值,两者交换;
5)重复第3、4步,直到I=J;

注:关键数据时不变的。

// 快速排序 function(array) {    //var array = [8,4,6,2,7,9,3,5,74,5];    //var array = [0,1,2,44,4,324,5,65,6,6,34,4,5,6,2,43,5,6,62,43,5,1,4,51,56,76,7,7,2,1,45,4,6,7];    var i = 0;    var j = array.length - 1;    var Sort = function(i, j) {        // 结束条件        if (i == j) {            return        };        var key = array[i];        var stepi = i; // 记录开始位置        var stepj = j; // 记录结束位置        while (j > i) {            // j <<-------------- 向前查找            if (array[j] >= key) {                j--;            } else {                array[i] = array[j];                //i++ ------------>>向后查找                while (j > ++i) {                    if (array[i] > key) {                        array[j] = array[i];                        break;                    }                }            }        }        // 如果第一个取出的 key 是最小的数        if (stepi == i) {            Sort(++i, stepj);            return;        }        // 最后一个空位留给 key        array[i] = key;        // 递归

Sort(stepi, i);        Sort(j, stepj);    }    Sort(i, j);    return array;},

4.插入排序

总结:1.取关键数据:一开始取数组中第二个数作为关键数据,后面取第三个数据为关键数据,以此类推直到取到最后一个数据返回数组。2比较方法:把关键数据和前面第一个数据比较,如果这个数据大于关键数据数据,就把这个数据数据赋值给关键数据所在数组位置。再把关键数据和前面第二个数据比较,如果这个数据大于关键数据,就把这个数据赋值给其后一个数据所在数组位置。以此类推。最后把关键数据插入最后一个比它大的数据位置。

例子:

//插入排序

static void insertion_sort(int[] unsorted)

{

for (int i = 1; i < unsorted.Length; i++)

{

if (unsorted[i - 1] > unsorted[i])

{

int temp = unsorted[i];

int j = i;

//如果前面的数据大于后面的数据,就交换位置

while (j > 0 && unsorted[j - 1] > temp)

{

unsorted[j] = unsorted[j - 1];

j--;

}

unsorted[j] = temp;

}

}

}

static void Main(string[] args)

{

int[] x = { 6, 2, 4, 1, 5, 9 };

insertion_sort(x);

foreach (var item in x)

{

if (item > 0)

Console.WriteLine(item + ",");

}

Console.ReadLine();

}

5.希尔排序

总结:希尔排序的步骤:1.选取增量。2.根据增量虚拟分成若干数组,各数组间进行插入排序。3.增量选取会逐步减小,直到最后一个增量是1,在进行插入排序。排序完后希尔排序就完成。

注:1.最后一个增量必须是1。2.用该避免选取增量(尤其是相连的值)互为倍数的情况。

例子:

static void shell_sort(int[] unsorted, int len)

{

int group, i, j, temp;

//group是选取的增量,从中间开始选取。

for (group = len / 2; group > 0; group /= 2)            {

//虚拟分组进行插入排序。

for (i = group; i < len; i++)

{

for (j = i - group; j >= 0; j -= group)

{

//一般插入排序方法。

if (unsorted[j] > unsorted[j + group])

{

//如果前面数据比后面大,就交换位置。

temp = unsorted[j];

unsorted[j] = unsorted[j + group];

unsorted[j + group] = temp;

}

}

}

}

}

static void Main(string[] args)

{

int[] x = { 6, 2, 4, 1, 5, 9 };

shell_sort(x, x.Length);

foreach (var item in x)

{

Console.WriteLine(item);

}

Console.ReadLine();

}

时间: 2024-11-09 09:45:13

js排序介绍的相关文章

Node.js简单介绍

Node.js是一个能够让javascript执行在server上的平台,既是语言又是平台. Node.js是一个实时web应用程序的平台. Node.js有强大的包管理器npm,故node相关软件安装用npm命令安装. Node.js简单介绍,布布扣,bubuko.com

【js】IE、FF、Chrome浏览器中的JS差异介绍

如何判断浏览器类型 转:http://www.cnblogs.com/carekee/articles/1854674.html 1.通过浏览器特有的对象 如ie 的ActiveXObject  ff 的getBoxObjectFor  opera 的window.opera  safari 的openDatabase  Chrome 的MessageEvent有趣的是,Chrome的userAgent还包含了Safari的特征,也许这就是Chrome可以运行所有Apple浏览器应用的基础吧 2

sea.js的介绍和使用

之前有一篇博客非常详细的介绍了sea.js的加载流程,以及源代码实现,链接地址:http://www.cnblogs.com/chaojidan/p/4123980.html 这篇博客我主要讲下sea.js的介绍和使用. 首先,先介绍下sea.js的CMD规范,以及跟其他规范的区别. CommonJS 原来叫 ServerJS,推出 Modules/1.0 规范后,在 Node.js 等环境下取得了很不错的实践. 09年下半年这帮充满干劲的小伙子们想把 ServerJS 的成功经验进一步推广到浏

Web3D编程入门总结——WebGL与Three.js基础介绍

1 /*在这里对这段时间学习的3D编程知识做个总结,以备再次出发.计划分成“webgl与three.js基础介绍”.“面向对象的基础3D场景框架编写”.“模型导入与简单3D游戏编写”三个部分,其他零散知识以后有机会再总结.*/ 2 /*第一部分,webgl与three.js基础介绍,要求读者掌握JavaScript入门知识*/ 3 //webgl原理:通过JavaScript语言在浏览器端生成glsl代码,把glsl代码送入显卡执行,把执行结果显示在浏览器中 4 //简单例程: 5 //根据To

利用js排序html表格

在web前端开发中会遇到排序等功能,当然也可以用服务器端来排序,今天我做一个笔记,怎么用js来实现这些复杂的功能呢. 在学习这个之前一定得用html dom jquery 的知识,要不没有办法看明白的,当然也不包括你是一个天才了.哈哈! 好了,先说一下思路,这里说一下,在学习一个js特效的时候思路很重要,可以说你不用对js多么的精通,但是一个功能放在你的面前,你必须有个很清晰的思路,这样做起来就很容易了,就算是再困难的特效也不例外! 一共有四个步骤:首先要给触发排序的控件添加事件,这里我就略过了

[IOS_HTML5]各种JS框架介绍--用HTML5/CSS3/JS开发Android/IOS应用

现在人人都想成为安卓/IOS应用开发工程师.其实,安卓/IOS应用可以用很多种语言来实现.由于我们前端开发工程师,对HTML5/CSS/JavaScript的网络编程已经相当熟悉了.所以,今天大家将会认识到一些利用前端语言来开发安卓/IOS应用的工具. 在文章的末尾,也介绍了使用JAVA.C#.Lua以及AS3来开发安卓应用的工具. 希望大家都能找到适合自己的开发工具!祝大家开发安卓/IOS应用一切顺利! PhoneGap 开发语言: HTML, CSS, JavaScript 开发工具: Ph

doT.js详细介绍

doT.js详细介绍 doT.js特点是快,小,无依赖其他插件. 官网:http://olado.github.iodoT.js详细使用介绍 使用方法:{{= }} for interpolation{{ }} for evaluation{{~ }} for array iteration{{? }} for conditionals{{! }} for interpolation with encoding{{# }} for compile-time evaluation/includes

拓扑排序介绍

拓扑排序介绍 拓扑排序(Topological Order)是指,将一个有向无环图(Directed Acyclic Graph简称DAG)进行排序进而得到一个有序的线性序列. 这样说,可能理解起来比较抽象.下面通过简单的例子进行说明! 例如,一个项目包括A.B.C.D四个子部分来完成,并且A依赖于B和D,C依赖于D.现在要制定一个计划,写出A.B.C.D的执行顺序.这时,就可以利用到拓扑排序,它就是用来确定事物发生的顺序的. 在拓扑排序中,如果存在一条从顶点A到顶点B的路径,那么在排序结果中B

Python排序介绍

Python排序介绍 本文简单记录了Python中的内建函数 sort() 和 sorted() 的使用方法,以及它们在 Python2 和 Python3 中的区别. 概述 内建函数 sort() 和 sorted() 都可以对一个List进行排序,它们的区别是,sort 对 List 本身进行排序(sorts the list in place),没有返回,而 sorted 会返回经过排序后的 list.两者的参数一样,所进行的排序都是稳定的. >>> l = [2, 4, 6, 1