1.冒泡排序
循环的最大值从length递减
每次循环只能排好最后一个,然后递减到第一个

function bubbleSort(){
var changedData = new Array();
var index = 0;
console.log("冒泡调用");
for (var j = a.length; j >0 ; j--) {
for (var i = 0; i < j; i++) {
if(a[i]>a[i+1]){
var z = 0;
z = a[i+1];
a[i+1] = a[i];
a[i] = z;
}
changedData[index] = a.toString();
index++;
}//one
}//two
showDateChange(changedData);
}

2.选择排序
外循环 j选取当前元素 到length-1
内循环 j+1开始 到length 逐个比较出最小值min
交换 min 和 a[j]

function selectionSort(){
var changedData = new Array();
var index = 0;
console.log("选择调用");
for (var j = 0; j < a.length-1; j++) {
var min = a[j];
var minIndex = j;
for (var i = j+1; i < a.length; i++) {
if(a[i] < min) {
min = a[i];
minIndex = i;
}
}//one
a[minIndex] = a[j];
a[j] = min;
//
changedData[index] = a.toString();
index++;
}//two
showDateChange(changedData);

3.插入排序(和冒泡相反)
从下标1开始 往后选择直到最后
每个选中的和他前面的所有比较
直到找到比他小的 排在他后面
相当于从1开始 每次都排好之前的i+1个 直到length

function insertionSort(){
var changedData = new Array();
var index = 0;
console.log("插入排序");
for (var j = 1; j < a.length; j++) {
var now = a[j];
var i = j - 1;
while(i>=0 && now<a[i]){
// 向后移数组
a[i+1] = a[i];
i--;
}//one
a[i+1] = now;
changedData[index] = a.toString();
index++;
}//two
showDateChange(changedData);
}

4.希尔排序
间隔改变的插入排序
传统插入排序 比较前面的相邻对象
希尔排序比较前面的第h个对象 直到h间隔不存在更改
改变h直到h=1

function shellSort(){
var changedData = new Array();
var index = 0;
console.log("希尔排序");
var N = a.length;
var h = 1;
if (h < N/3) {
h = h*3 + 1;//设置间隔
}
while(h > 0){
for (var j = h; j < a.length; j++) {
for (var i = j;i >= h && a[i] < a[i-h]; i -= h) {
var z;
z = a[i];
a[i] = a[i-h];
a[i-h] = z;
//
changedData[index] = a.toString();
index++;
}
}
h = (h-1)/3;//改变间隔
}
showDateChange(changedData);
}

5.归并排序
数据分为 step为间隔的小数组
将小数组排序 step变大 直到为1/2个数组
将前后两个已排序的数组,再排序

function mergeSort(arr){
var changedData = new Array();
console.log("归并排序");
if (arr.length < 2) {
return;
}
var step = 1;
var left;
var right;
while(step < arr.length){
left = 0;
right = step;
while(right + step <= arr.length){
mergeArrays(arr,left,left+step,right,right+step);
left = right + step;
right = left + step;
}
if (right < arr.length) {
mergeArrays(arr,left,left+step,right,arr.length);
}
step *= 2;
}
function mergeArrays(arr,startLeft,stopLeft,startRight,stopRight){
var leftArray = new Array(stopLeft - startLeft +1);
var rightArray = new Array(stopRight - startRight +1);
k = startRight;
for (var i = 0; i < rightArray.length-1; i++) {
rightArray[i] = arr[k];
k++;
}
k = startLeft;
for (var i = 0; i < leftArray.length-1; i++) {
leftArray[i] = arr[k];
k++;
}
rightArray[rightArray.length-1] = Infinity;
leftArray[leftArray.length-1] = Infinity;
var m = 0;
var n = 0;
for (var k = startLeft; k < stopRight; k++) {
if (leftArray[m] <= rightArray[n]) {
arr[k] = leftArray[m];
m++;
}else{
arr[k] = rightArray[n];
n++;
}
}
arr += "";//转化为字符串
changedData.push(arr);
}
showDateChange(changedData);
}

6.快速排序

没实现可视化排序

function quickSort(){
console.log("快速排序");
function qSort(list){
if (list.length == 0) {
return list;
}
// 选取基数
var pivotIndex = Math.floor(list.length/2);
var pivot = list.splice(pivotIndex,1)[0]; var left = [];
var right = [];
for (var i = 0; i < list.length; i++) {
if (list[i] > pivot) {
right.push(list[i]);
}else{
left.push(list[i]);
}
}
// 递归 更换基数 并且排序其左右
return qSort(left).concat([pivot],qSort(right));
}
a = qSort(a);
showDate();
}

JavaScript之六种排序法的更多相关文章

  1. javascript数据结构与算法--高级排序算法(快速排序法,希尔排序法)

    javascript数据结构与算法--高级排序算法(快速排序法,希尔排序法) 一.快速排序算法 /* * 这个函数首先检查数组的长度是否为0.如果是,那么这个数组就不需要任何排序,函数直接返回. * ...

  2. 六种排序算法的JavaScript实现以及总结

    最近几天在系统的复习排序算法,之前都没有系统性的学习过,也没有留下过什么笔记,所以很快就忘了,这次好好地学习一下. 首先说明为了减少限制,以下代码通通运行于Node V8引擎而非浏览器,源码在我的Gi ...

  3. php六种基础算法:冒泡,选择,插入,快速,归并和希尔排序法

    $arr(1,43,54,62,21,66,32,78,36,76,39); 1. 冒泡排序法  *     思路分析:法如其名,就是像冒泡一样,每次从数组当中 冒一个最大的数出来.  *     比 ...

  4. Python基础知识之排序法

    在Python开发中,我们会经常使用到排序法,排序的最简单的方法是用sort(list)函数,它接受一个列表并返回与有序的元素一个新的列表. 原始列表不被改变. a = [5, 1, 4, 3]    ...

  5. javascript数组对象排序

    javascript数组对象排序 JavaScript数组内置排序函数 javascript内置的sort函数是多种排序算法的集合 JavaScript实现多维数组.对象数组排序,其实用的就是原生的s ...

  6. Atitit.现实生活中最好使用的排序方法-----ati排序法总结

    Atitit.现实生活中最好使用的排序方法-----ati排序法总结 1. 现在的问题 1 2. 排序的类别::插入排序//交换排序//选择排序(每次最小/大排在相应的位置  )//归并排序//基数排 ...

  7. JAVA基础学习之命令行方式、配置环境变量、进制的基本转换、排序法、JAVA文档生成等(1)

    1.命令行方式 dos命令行,常见的命令: dir:列出当前目录下的文件以及文件夹 md:创建目录 rd:删除目录 cd:进入指定目录 cd..:退回到上一级目录 cd/:退回到根目录 del:删除文 ...

  8. C语言实现冒泡排序法和选择排序法代码参考

    为了易用,我编写排序函数,这和直接在主调函数中用是差不多的. 我认为选择排序法更好理解!请注意 i 和 j ,在写代码时别弄错了,不然很难找到错误! 冒泡排序法 void sort(int * ar, ...

  9. C语言 数组输出,冒泡排序法,沉底排序法,二维数组输出,输出字母列长度,从随机数组中找重复数

    #include <stdio.h> #define sum 3+4//宏定义是原封不动的使用used for test4 #include <time.h>//used fo ...

随机推荐

  1. Visual Studio 2012 使用SvcUtil在MVC4客户端引用WCF服务

    已创建服务. 若要测试此服务,需要创建一个客户端,并将其用于调用该服务.可以使用下列语法,从命令行中使用 svcutil.exe 工具来进行此操作: svcutil.exe http://localh ...

  2. 【JavaScript】页面加载性能优化

    核心在于:减少加载时间 1.减少请求次数 2.缩减文件大小 3.异步加载---------------------->比如document.write 4.延迟加载.动态加载---------- ...

  3. 使用iOS手势UIGestureRecognizer

    UIKit中包含了UIGestureRecognizer类,用于检测发生在设备中的手势.UIGestureRecognizer是一个抽象类,定义了所有手势的基本行为,它有下面一些子类用于处理具体的手势 ...

  4. Android端百度地图API使用详解

    百度地图API简介 百度地图移动版API(Android)是一套基于Android设备的应用程序接口,通过该接口,可以轻松的访问百度服务和数据,构建功能丰富.交互性强的地图应用程序. 百度地图移动版A ...

  5. IIS6_IIS7日志文件位置

    准备统计下页面访问量 查找IIS日志,发现在以前IIS6日志的位置,竟然木有找到日志... 查看下IIS设置,发现IIS7和6的默认日志位置不一样额... IIS 6 Log files locati ...

  6. 标准库 - fmt/print.go 解读

    // Copyright 2009 The Go Authors. All rights reserved. // Use of this source code is governed by a B ...

  7. 关于Android(Java)创建匿名线程

    Java中创建匿名线程主要集中就三中方式:Thread,Runnable,Handler去实现,下面分别介绍之- 一.通过Thread来创建 new Thread() { public void ru ...

  8. CentOS安装某个命令的办法如locate

    在Linux使用命令时,有时候因为系统精简的原因,某些命令可能没有安装locate包,例如你要输入的命令是locate 发现没有该命令,修复办法如下: 一.使用如下命令查询缺失命令的包名 #yum l ...

  9. jquery学习笔记2

    1.点击时文字消失,失去焦点时文字再出现 <input type="text" value="郭强" onfocus="if(value=='郭 ...

  10. Spring MVC Controller单例陷阱

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://lavasoft.blog.51cto.com/62575/1394669 Spr ...