function ArrayList() {
var array = [];
this.swap = function(index1, index2) {
var aux = array[index1];
array[index1] = array[index2];
array[index2] = aux;
}
var swapQuickSort = function(arrayList, index1, index2) {
var aux = arrayList[index1];
arrayList[index1] = arrayList[index2];
arrayList[index2] = aux;
}
this.print = function() {
console.log(array.join())
}
this.insert = function(item) {
array.push(item);
}
this.toString = function() {
return array.join();
}
this.bubbleSort = function() {
var length = array.length;
for (var i = 0; i < length; i++) {
for (var j = 0; j < length - 1; j++) {
if (array[j] > array[j + 1]) {
this.swap(j, j + 1);
}
}
}
}
this.createNonSortedArrary = function(size) {
var array = new ArrayList();
for (var i = size; i > 0; i--) {
array.insert(i);
}
return array;
}
this.adBubbleSort = function() {
var length = array.length;
for (var i = 0; i < length; i++) {
for (var j = 0; j < length - 1; j++) {
if (array[j] > array[j + 1]) {
this.swap(j, j + 1);
}
}
}
}
this.selectedSort = function() {
var length = array.length,
indexMin;
for (var i = 0; i < length - 1; i++) {
indexMin = i;
for (var j = i; j < length; j++) {
if (array[indexMin] > array[j]) {
indexMin = j;
}
}
if (i !== indexMin) {
this.swap(i, indexMin);
}
}
}
this.insertionSort = function() {
var length = array.length,
j,
temp;
for (var i = 0; i < length; i++) {
j = i;
temp = array[i];
while (j > 0 && array[j - 1] > temp) {
array[j] = array[j - 1];
j--;
}
array[j] = temp;
}
}
var merge = function(left, right) {
var result = [],
il = 0,
ir = 0;
while (il < left.length && ir < right.length) {
if (left[il] < right[ir]) {
result.push(left[il++]);
} else {
result.push(right[ir++]);
}
}
while (il < left.length) {
result.push(left[il++]);
}
while (ir < right.length) {
result.push(right[ir++]);
}
return result;
}
var mergeSortRec = function(arrayList) {
var length = arrayList.length;
if (length == 1) {
return arrayList;
}
var mid = Math.floor(length / 2),
left = arrayList.slice(0, mid),
right = arrayList.slice(mid, length);
return merge(mergeSortRec(left), mergeSortRec(right));
}
this.mergeSort = function() {
array = mergeSortRec(array);
}
var parition = function(arrayList, left, right) {
var pivot = arrayList[Math.floor((right + left) / 2)],
i = left,
j = right;
while (i <= j) {
while (arrayList[i] < pivot) {
i++;
}
while (arrayList[j] > pivot) {
j--;
}
if (i <= j) {
swapQuickSort(arrayList, i, j);
i++;
j--;
}
}
return i;
}
var quick = function(arrayList, left, right) {
var index;
if (arrayList.length > 1) {
index = parition(arrayList, left, right);
if (left < index - 1) {
quick(arrayList, left, index - 1);
}
if (index < right) {
quick(arrayList, index, right);
}
}
}
this.quickSort = function() {
quick(array, 0, array.length - 1);
}
this.clear = function() {
array = [];
}
this.sequentialSearch = function(item) {
for (var i = 0; i < array.length; i++) {
if (item == array[i]) {
return i;
}
}
return -1;
}
this.binarySearch = function(item) {
this.quickSort();
var low = 0,
high = array.length - 1,
mid,
element;
while (low <= high) {
mid = Math.floor((low + high) / 2);
element = array[mid];
if (element < item) {
low = mid + 1;
} else if (element > item) {
high = mid - 1
}else{
return mid;
}
}
}
}
var insertDefaultValue = function(array) {
array.insert(10);
array.insert(15);
array.insert(20);
array.insert(0);
array.insert(2);
array.insert(1);
}
var arrayList = new ArrayList();
insertDefaultValue(arrayList);
console.log("普通冒泡")
arrayList.bubbleSort();
arrayList.print();
arrayList.clear();
console.log("高级冒泡")
insertDefaultValue(arrayList);
arrayList.adBubbleSort();
arrayList.print();
arrayList.clear();
console.log("高级冒泡")
insertDefaultValue(arrayList);
arrayList.adBubbleSort();
arrayList.print();
arrayList.clear();
console.log("选择排序")
insertDefaultValue(arrayList);
arrayList.selectedSort();
arrayList.print();
arrayList.clear();
console.log("插入排序")
insertDefaultValue(arrayList);
arrayList.insertionSort();
arrayList.print();
arrayList.clear();
console.log("归并排序")
insertDefaultValue(arrayList);
arrayList.mergeSort();
arrayList.print();
arrayList.clear();
console.log("快速排序")
insertDefaultValue(arrayList);
arrayList.quickSort();
arrayList.print();
console.log(arrayList.sequentialSearch(15));
console.log(arrayList.binarySearch(20));
arrayList.clear();

JavaScript Sort的更多相关文章

  1. javascript sort()与reverse()

    javascript 中提供了两个对数据进行排序的方法,即sort()和reverse() 在理解的时候犯了一个非常低级的错误,现记录如下: reverse()不包括排序的功能,只是把原来的数组反转. ...

  2. javascript sort 用法

    <html> <head> <title></title> <script type="text/javascript" sr ...

  3. JavaScript sort() 方法

    定义和用法 sort() 方法用于对数组的元素进行排序. 语法 arrayObject.sort(sortby) 参数 描述 sortby 可选.规定排序顺序.必须是函数. 返回值 对数组的引用.请注 ...

  4. javascript sort方法容易犯错的地方

    sort方法用来对数组排序非常方便.但是sort(func)这个func参数的构造却很容易混淆. sort判断func的返回值是判断正负,而不是ture和false.所以务必保证返回值要么负数要么正数 ...

  5. Javascript:sort()方法快速实现对数组排序

    定义和用法: sort() 方法用于对数组的元素进行排序. 语法: arrayObject.sort(sortby) 注释:sortby,可选,规定排序顺序,必须是函数. 说明: 如果调用该方法时没有 ...

  6. javascript sort排序

    var arr = [5,32,28,66,2,15,3]; arr.sort(function(a1,a2){ return a1-a2; //a2-a1 输入倒序 }); console.log( ...

  7. JavaScript sort()方法比较器

    当我们想把一个由数字组成的数组进行简单的排序时,可能会想到sort()方法: var arr = [2 , 3, -1, -107, -14, 1]; console.log(arr.sort()) ...

  8. JavaScript sort() 方法详解

    定义和用法 sort() 方法用于对数组的元素进行排序. 语法 arrayObject.sort(sortby) 参数 描述 sortby 可选.规定排序顺序.必须是函数. 返回值 对数组的引用.请注 ...

  9. Javascript sort方法

    sort()方法用于对数组的元素进行排序 语法:array.Object.sort(sortBy) sortBy:可选.规定排序顺序.必须是函数 返回值:对数组的引用.数组在原数组上进行排序,不生成副 ...

  10. javascript sort 函数用法

    sort 函数 博客地址:https://ainyi.com/41 简单的说,sort() 在没有参数时,返回的结果是按升序来排列的.即字符串的Unicode码位点(code point)排序 [5, ...

随机推荐

  1. vue css中scoped

    1.什么是scoped vue组件中,在style标签中有一个属性,叫做scoped.当此标签拥有scoped属性的时候,该组件下的css样式只适用于本组件,而不会影响全局组件.这其实也相当于样式的模 ...

  2. wepy的第一个demo

    一.在node中安装相应的模块文件,查看文档 二.案例 json部分 { "usingComponents": { "van-button": ".. ...

  3. Python之路-函数基础&局部变量与全局变量&匿名函数&递归函数&高阶函数

    一.函数的定义与调用 函数:组织好的.可重复使用的.用户实现单一或者关联功能的代码段.函数能够提高应用的模块性和代码的重复利用率.Python提供了很多内置的函数,比如len等等,另外也可以根据自己的 ...

  4. ps:界面概览

    首先我们来认识一下Photoshop的界面组成,如下图是一个典型的界面.为了方便识别,我们加上了颜色和数字. 1:顶部的红色区域是菜单栏,包括色彩调整之类的命令都存放在从菜单栏中.在我们的教程中使用[ ...

  5. Linux 普通用户自动修改密码

    在大量服务器运维中,维护服务器账号就让人头痛,对账号密码策略要求,现写了一个shell脚本来完成账号密码的修改,当然这个不是最好的方法,只是在没有其它辅助服务时使用,最好还是使用账户统一管理服务来维护 ...

  6. SpringBoot application.proerties基本配置

    #设置日志输出路径,日志文件名称,输出日志级别 默认日志文件超过10M会切分成多个文件 最新的日志文件就是设置的日志文件 logging.level.root=INFOlogging.level.or ...

  7. layer-框架使用修改部分

    关于框架中js调子方法出错的处理 top.layer.open({ id: options.id, type: 2, shade: options.shade, title: options.titl ...

  8. 类数组对象与 arguments

    类数组对象:拥有一个 length 属性和若干索引属性的对象 var array = ['name', 'age', 'sex']; var arrayLike = { 0: 'name', 1: ' ...

  9. 【テンプレート】LCA

    LCA目前比较流行的算法主要有tarjian,倍增和树链剖分 1)tarjian 是一种离线算法,需要提前知道所有询问对 算法如下 1.读入所有询问对(u,v),并建好树(建议邻接表) 2.初始化每个 ...

  10. JavaBean属性和成员变量的区别和联系

    JavaBeans是Java中一种特殊的类,可以将多个对象封装到一个对象(bean)中.特点是可序列化,提供无参构造器,提供getter方法和setter方法访问对象的属性.名称中的“Bean”是用于 ...