1.算法排序

a.插入排序

var arr = [23,34,3,4,23,44,333,444];

		var arrShow = (function insertionSort(array){
if(Object.prototype.toString.call(array).slice(8,-1) ==='Array'){ for (var i = 1; i < array.length; i++) {
var key = array[i];
var j = i - 1;
while (j >= 0 && array[j] > key) {
array[j + 1] = array[j];
j--;
}
array[j + 1] = key;
}
return array;
}else{ return 'array is not an Array!';
}
})(arr); console.log(arrShow);//[3, 4, 23, 23, 34, 44, 333, 444]

b.二分插入排序

function binaryInsertionSort(array) {
if (Object.prototype.toString.call(array).slice(, -) === 'Array') {
for (var i = ; i < array.length; i++) {
var key = array[i], left = , right = i - ;
while (left <= right) {
var middle = parseInt((left + right) / );
if (key < array[middle]) {
right = middle - ;
} else {
left = middle + ;
}
}
for (var j = i - ; j >= left; j--) {
array[j + ] = array[j];
}
array[left] = key;
}
return array;
} else {
return 'array is not an Array!';
}
}

c.选择排序

function selectionSort(array) {
if (Object.prototype.toString.call(array).slice(, -) === 'Array') {
var len = array.length, temp;
for (var i = ; i < len - ; i++) {
var min = array[i];
for (var j = i + ; j < len; j++) {
if (array[j] < min) {
temp = min;
min = array[j];
array[j] = temp;
}
}
array[i] = min;
}
return array;
} else {
return 'array is not an Array!';
}
}

d、冒泡排序

function bubbleSort(array) {
if (Object.prototype.toString.call(array).slice(, -) === 'Array') {
var len = array.length, temp;
for (var i = ; i < len - ; i++) {
for (var j = len - ; j >= i; j--) {
if (array[j] < array[j - ]) {
temp = array[j];
array[j] = array[j - ];
array[j - ] = temp;
}
}
}
return array;
} else {
return 'array is not an Array!';
}
}

e、快速排序

//方法一
function quickSort(array, left, right) {
if (Object.prototype.toString.call(array).slice(, -) === 'Array' && typeof left === 'number' && typeof right === 'number') {
if (left < right) {
var x = array[right], i = left - , temp;
for (var j = left; j <= right; j++) {
if (array[j] <= x) {
i++;
temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
quickSort(array, left, i - );
quickSort(array, i + , right);
};
} else {
return 'array is not an Array or left or right is not a number!';
}
}
var aaa = [, , , , ];
quickSort(aaa, , aaa.length - );
console.log(aaa); //方法二
var quickSort = function(arr) {
  if (arr.length <= ) { return arr; }
  var pivotIndex = Math.floor(arr.length / );
  var pivot = arr.splice(pivotIndex, )[];
  var left = [];
  var right = [];
  for (var i = ; i < arr.length; i++){
    if (arr[i] < pivot) {
      left.push(arr[i]);
    } else {
      right.push(arr[i]);
    }
  }
  return quickSort(left).concat([pivot], quickSort(right));
};

f、堆排序

/*方法说明:堆排序
@param array 待排序数组*/
function heapSort(array) {
if (Object.prototype.toString.call(array).slice(, -) === 'Array') {
//建堆
var heapSize = array.length, temp;
for (var i = Math.floor(heapSize / ); i >= ; i--) {
heapify(array, i, heapSize);
} //堆排序
for (var j = heapSize - ; j >= ; j--) {
temp = array[];
array[] = array[j];
array[j] = temp;
heapify(array, , --heapSize);
}
} else {
return 'array is not an Array!';
}
}
/*方法说明:维护堆的性质
@param arr 数组
@param x 数组下标
@param len 堆大小*/
function heapify(arr, x, len) {
if (Object.prototype.toString.call(arr).slice(, -) === 'Array' && typeof x === 'number') {
var l = * x, r = * x + , largest = x, temp;
if (l < len && arr[l] > arr[largest]) {
largest = l;
}
if (r < len && arr[r] > arr[largest]) {
largest = r;
}
if (largest != x) {
temp = arr[x];
arr[x] = arr[largest];
arr[largest] = temp;
heapify(arr, largest, len);
}
} else {
return 'arr is not an Array or x is not a number!';
}
}

h、归并排序

function mergeSort(array, p, r) {
if (p < r) {
var q = Math.floor((p + r) / );
mergeSort(array, p, q);
mergeSort(array, q + , r);
merge(array, p, q, r);
}
}
function merge(array, p, q, r) {
var n1 = q - p + , n2 = r - q, left = [], right = [], m = n = ;
for (var i = ; i < n1; i++) {
left[i] = array[p + i];
}
for (var j = ; j < n2; j++) {
right[j] = array[q + + j];
}
left[n1] = right[n2] = Number.MAX_VALUE;
for (var k = p; k <= r; k++) {
if (left[m] <= right[n]) {
array[k] = left[m];
m++;
} else {
array[k] = right[n];
n++;
}
}
}

g、桶排序

/*方法说明:桶排序
@param array 数组
@param num 桶的数量*/
function bucketSort(array, num) {
if (array.length <= ) {
return array;
}
var len = array.length, buckets = [], result = [], min = max = array[], regex = '/^[1-9]+[0-9]*$/', space, n = ;
num = num || ((num > && regex.test(num)) ? num : );
for (var i = ; i < len; i++) {
min = min <= array[i] ? min : array[i];
max = max >= array[i] ? max : array[i];
}
space = (max - min + ) / num;
for (var j = ; j < len; j++) {
var index = Math.floor((array[j] - min) / space);
if (buckets[index]) { // 非空桶,插入排序
var k = buckets[index].length - ;
while (k >= && buckets[index][k] > array[j]) {
buckets[index][k + ] = buckets[index][k];
k--;
}
buckets[index][k + ] = array[j];
} else { //空桶,初始化
buckets[index] = [];
buckets[index].push(array[j]);
}
}
while (n < num) {
result = result.concat(buckets[n]);
n++;
}
return result;
}

i、计数排序

function countingSort(array) {
var len = array.length, B = [], C = [], min = max = array[];
for (var i = ; i < len; i++) {
min = min <= array[i] ? min : array[i];
max = max >= array[i] ? max : array[i];
C[array[i]] = C[array[i]] ? C[array[i]] + : ;
}
for (var j = min; j < max; j++) {
C[j + ] = (C[j + ] || ) + (C[j] || );
}
for (var k = len - ; k >=; k--) {
B[C[array[k]] - ] = array[k];
C[array[k]]--;
}
return B;
}

j、js自带的函数sort

arr.sort(function(a,b){

  return a-b;

})

<script>
var arr = [,,,,,,,];
arr.sort(function(a,b){
return a-b;
})
console.log(arr);
</script>

js 数组排序和算法排序的更多相关文章

  1. Js数组排序以及对象排序

    封装排序方法 对象排序方法 function compare(arr,styleName){ arr.sort((a,b)=>{ let x=a[styleName]; let y=b[styl ...

  2. JS的十大经典算法排序

    引子 有句话怎么说来着: 雷锋推倒雷峰塔,Java implements JavaScript. 当年,想凭借抱Java大腿火一把而不惜把自己名字给改了的JavaScript(原名LiveScript ...

  3. js数组排序,支持正反排序以及多维度排序

    工作中遇到js数组排序问题,数组中存储的都是对象,于是就百度了下,利用别人的代码进行修改,最终完成可以倒序.反序,可以进行多维度排序的功能源码如下: /** * js数组排序 支持数字和字符串 * @ ...

  4. JS数组排序技巧汇总(冒泡、sort、快速、希尔等排序)

    本文实例总结了JS数组排序技巧.分享给大家供大家参考,具体如下: 1.冒泡排序 var temp = 0; for (var i = 0; i < array.length; i++) { fo ...

  5. 使用 js 实现十大排序算法: 快速排序

    使用 js 实现十大排序算法: 快速排序 QuickSort 快速排序 /** * * @author xgqfrms * @license MIT * @copyright xgqfrms * @c ...

  6. 使用 js 实现十大排序算法: 桶排序

    使用 js 实现十大排序算法: 桶排序 桶排序 refs xgqfrms 2012-2020 www.cnblogs.com 发布文章使用:只允许注册用户才可以访问!

  7. 使用 js 实现十大排序算法: 计数排序

    使用 js 实现十大排序算法: 计数排序 计数排序 refs xgqfrms 2012-2020 www.cnblogs.com 发布文章使用:只允许注册用户才可以访问!

  8. 使用 js 实现十大排序算法: 基数排序

    使用 js 实现十大排序算法: 基数排序 基数排序 refs xgqfrms 2012-2020 www.cnblogs.com 发布文章使用:只允许注册用户才可以访问!

  9. 使用 js 实现十大排序算法: 冒泡排序

    使用 js 实现十大排序算法: 冒泡排序 冒泡排序 refs xgqfrms 2012-2020 www.cnblogs.com 发布文章使用:只允许注册用户才可以访问!

随机推荐

  1. 20145207《Java程序设计》第三周学习总结

    前言 24号回来的,书看的差不多了,博客一直没写,求老师原谅呀!!!!!哈哈哈哈.博客我从今天开始补,对着书,一天最多能弄个两篇毕竟写这个东西挺费心思德,当然我做事慢也有关系.但是我会尽快的.老实讲, ...

  2. codevs 2235 机票打折

    http://codevs.cn/problem/2235/ 2235 机票打折  时间限制: 1 s  空间限制: 32000 KB  题目等级 : 青铜 Bronze 题解       题目描述  ...

  3. oracle,sqlserver,mysql 命令行 开启、关闭所需要的服务

    ORACLE需要开启的服务   需要启动的服务:   口令: 启动Oracle 11g服务: (下面的可以作为bat 脚本,直接运行便可以不用去自己去启动和关闭服务了.) @echo off @ EC ...

  4. 封装page分页类

    类: <?php //分页工具类 class Page{ /*         * 获取分页字符串         * @param1 string $uri,分页要请求的脚本url       ...

  5. android xutils

    http://blog.csdn.net/rishengcsdn/article/details/47279851/

  6. sklearn

    Feature extraction - sklearn文本特征提取 http://blog.csdn.net/pipisorry/article/details/41957763 http://sc ...

  7. 如何把一个java工程打成一个jar包(转载)

    1.jar包有入口(即有main()函数) 选中要打包的工程--->右键选择Export---->java----->Runnable java file----->next- ...

  8. 【HDNOIP】HD201404最短路径

    HD201404最短路径 [试题描述] a.b.c是3个互不相等的1位正数,用它们和数字0可以填满一个n行n列的方格阵列,每格中都有4种数码中的一个.填入0的格子表示障碍物,不能属于任何路径.你是否能 ...

  9. ckeditor添加插入flv视频的插件

    首发:个人博客,更新&纠错&回复 昨天写在网页中播放flv的博文的时候,想在博文中插入视频,但是发现无法实现.因为用的编辑器是ckeditor,决定自己写个插件插入视频.官方的教程在这 ...

  10. 改Bug总结

    [1]屏蔽取舍法 屏蔽取舍,即所谓与问题无关的前后“语境”完全可以忽略,首先屏蔽掉,再根据问题复现路径查看问题发生的区间,然后逐近锁定“病灶”,确定需要修改的目标. [2]追溯原形法 追溯原形,即需要 ...