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. Python2/3 安装各类包的教程

    1.pycryptodome(pyCrypto) pyCrypto包已经失效了,需要替换为pycryptodome 有SSR直接 pip install pycryptodome 国内用 pip in ...

  2. 编辑器和IDE的区别以及WebStorm和PhpStorm的区别

    编辑器和IDE的区别: 编辑器就是纯粹编辑文本的编辑器,识别级别在文字级,只显示你想写入和打开的文本内容,不管你写什么内容,只提供接收与显示功能,Windows自带的写字板就是最简单的编辑器.举个生活 ...

  3. Python之列表、元组、字典、集合及字符串的详细使用

    1.列表 列表相当与C++中的数组,是有序的项目, 通过索引进行查找,但使用起来却方便很多,具体的操作看代码,自己实践一次就非常简单了. 注:列表一般用中括号“[ ]” #列表(数组) name_li ...

  4. powerdesigner数据库设计

    (1)创建物理数据模型 打开PowerDesigner,然后点击File-->New  Model然后选择如下图所示的物理数据模型(物理数据模型的名字自己起,然后选择自己所使用的数据库即可) ( ...

  5. RabbitMQ 全套

    本博客代码运行环境 ErLang: ErLang_X64_22 version RabbitMQ: RabbitMQ_Server_3.7.15 version python : Python 3.7 ...

  6. 原生JS实现图片循环切换

    <!-- <!DOCTYPE html> <html> <head> <title>原生JS实现图片循环切换 —— 方法一</title&g ...

  7. flask之表单

    一:表单 表单用于注册,修改用户数据等场景. flask-wtf提供了一个包,可以创建表单:pip install flask-wtf 为了防止跨域请求,flask_wtf自己生成一个秘钥,用秘钥生成 ...

  8. 历时小半年总结之JAVA

    一.JavaSE 1.多线程 (1).进程与线程的区别? 答:进程是所有线程的集合,每一个线程是进程中的一条执行路径,线程只是一条执行路径. (2).为什么要用多线程? 答:提高程序效率 (3).多线 ...

  9. 如何从word中复制内容到网站后台编辑器中

    word图片转存,是指UEditor为了解决用户从word中复制了一篇图文混排的文章粘贴到编辑器之后,word文章中的图片数据无法显示在编辑器中,也无法提交到服务器上的问题而开发的一个操作简便的图片转 ...

  10. Centos7防火墙和SELinux的开启和关闭

    在虚拟机里面开启多个服务,对应多个端口,在防火墙开启的情况下,就要对外开放端口,这样客户端才能正常访问,但比较繁琐,关闭更直接点. 防火墙 临时关闭防火墙 systemctl stop firewal ...