js的几种排序

飘然离去      2022-02-07     398

关键词:

转载:http://www.jb51.net/article/81520.htm

一.冒泡排序   平均情况n方,最好n,最差n方

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
function BubbleSort(array) {
  var length = array.length;
  for (var i = length - 1; i > 0; i--) { //用于缩小范围
    for (var j = 0; j < i; j++) { //在范围内进行冒泡,在此范围内最大的一个将冒到最后面
      if (array[j] > array[j+1]) {
        var temp = array[j];
        array[j] = array[j+1];
        array[j+1] = temp;
      }
    }
    console.log(array);
    console.log("-----------------------------");
  }
  return array;
}
 
 
var arr = [10,9,8,7,7,6,5,11,3];
var result = BubbleSort(arr);
console.log(result);
/*
[ 9, 8, 7, 7, 6, 5, 10, 3, 11 ]
-----------------------------
[ 8, 7, 7, 6, 5, 9, 3, 10, 11 ]
-----------------------------
[ 7, 7, 6, 5, 8, 3, 9, 10, 11 ]
-----------------------------
[ 7, 6, 5, 7, 3, 8, 9, 10, 11 ]
-----------------------------
[ 6, 5, 7, 3, 7, 8, 9, 10, 11 ]
-----------------------------
[ 5, 6, 3, 7, 7, 8, 9, 10, 11 ]
-----------------------------
[ 5, 3, 6, 7, 7, 8, 9, 10, 11 ]
-----------------------------
[ 3, 5, 6, 7, 7, 8, 9, 10, 11 ]
-----------------------------
[ 3, 5, 6, 7, 7, 8, 9, 10, 11 ]
*/

 

二.选择排序  平均n方,最好n方,最差n方

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
function SelectionSort(array) {
  var length = array.length;
  for (var i = 0; i < length; i++) { //缩小选择的范围
    var min = array[i]; //假定范围内第一个为最小值
    var index = i; //记录最小值的下标
    for (var j = i + 1; j < length; j++) { //在范围内选取最小值
      if (array[j] < min) {
        min = array[j];
        index = j;
      }
    }
    if (index != i) { //把范围内最小值交换到范围内第一个
      var temp = array[i];
      array[i] = array[index];
      array[index] = temp;
    }
    console.log(array);
    console.log("---------------------");
  }
  return array;
}
 
var arr = [ 1, 10, 100, 90, 65, 5, 4, 10, 2, 4 ];
var result = SelectionSort(arr);
console.log(result);
/*
[ 1, 10, 100, 90, 65, 5, 4, 10, 2, 4 ]
---------------------
[ 1, 2, 100, 90, 65, 5, 4, 10, 10, 4 ]
---------------------
[ 1, 2, 4, 90, 65, 5, 100, 10, 10, 4 ]
---------------------
[ 1, 2, 4, 4, 65, 5, 100, 10, 10, 90 ]
---------------------
[ 1, 2, 4, 4, 5, 65, 100, 10, 10, 90 ]
---------------------
[ 1, 2, 4, 4, 5, 10, 100, 65, 10, 90 ]
---------------------
[ 1, 2, 4, 4, 5, 10, 10, 65, 100, 90 ]
---------------------
[ 1, 2, 4, 4, 5, 10, 10, 65, 100, 90 ]
---------------------
[ 1, 2, 4, 4, 5, 10, 10, 65, 90, 100 ]
---------------------
[ 1, 2, 4, 4, 5, 10, 10, 65, 90, 100 ]
---------------------
[ 1, 2, 4, 4, 5, 10, 10, 65, 90, 100 ]
*/

 

三.插入排序  平均n方  最好n 最差 n方

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
function InsertionSort(array) {
  var length = array.length;
  for (var i = 0; i < length - 1; i++) {
    //i代表已经排序好的序列最后一项下标
    var insert = array[i+1];
    var index = i + 1;//记录要被插入的下标
    for (var j = i; j >= 0; j--) {
      if (insert < array[j]) {
        //要插入的项比它小,往后移动
        array[j+1] = array[j];
        index = j;
      }
    }
    array[index] = insert;
    console.log(array);
    console.log("-----------------------");
  }
  return array;
}
 
var arr = [100,90,80,62,80,8,1,2,39];
var result = InsertionSort(arr);
console.log(result);
/*
[ 90, 100, 80, 62, 80, 8, 1, 2, 39 ]
-----------------------
[ 80, 90, 100, 62, 80, 8, 1, 2, 39 ]
-----------------------
[ 62, 80, 90, 100, 80, 8, 1, 2, 39 ]
-----------------------
[ 62, 80, 80, 90, 100, 8, 1, 2, 39 ]
-----------------------
[ 8, 62, 80, 80, 90, 100, 1, 2, 39 ]
-----------------------
[ 1, 8, 62, 80, 80, 90, 100, 2, 39 ]
-----------------------
[ 1, 2, 8, 62, 80, 80, 90, 100, 39 ]
-----------------------
[ 1, 2, 8, 39, 62, 80, 80, 90, 100 ]
-----------------------
[ 1, 2, 8, 39, 62, 80, 80, 90, 100 ]
*/

 

四.希尔排序(shell排序)每一种巧妙算法的本质是利用了一种巧合,shell算法的平均时间是nlog2n说明,他的本质和快速排序是一样的,只不过他的形式不同,不过 有一点相同的,他们都分为2分之一这种思想,不过shell更巧合一点。

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
function ShellSort(array) {
  var length = array.length;
  var gap = Math.round(length / 2);
  while (gap > 0) {
    for (var i = gap; i < length; i++) {
      var insert = array[i];
      var index = i;
      for (var j = i; j >= 0; j-=gap) {
        if (insert < array[j]) {
          array[j+gap] = array[j];
          index = j;
        }
      }
      array[index] = insert;
    }
    console.log(array);
    console.log("-----------------------");
    gap = Math.round(gap/2 - 0.1);
  }
  return array;
}
 
var arr = [ 13, 14, 94, 33, 82, 25, 59, 94, 65, 23, 45, 27, 73, 25, 39, 10 ];
var result = ShellSort(arr);
console.log(result);
/*
[ 13, 14, 45, 27, 73, 25, 39, 10, 65, 23, 94, 33, 82, 25, 59, 94 ]
-----------------------
[ 13, 14, 39, 10, 65, 23, 45, 27, 73, 25, 59, 33, 82, 25, 94, 94 ]
-----------------------
[ 13, 10, 39, 14, 45, 23, 59, 25, 65, 25, 73, 27, 82, 33, 94, 94 ]
-----------------------
[ 10, 13, 14, 23, 25, 25, 27, 33, 39, 45, 59, 65, 73, 82, 94, 94 ]
-----------------------
[ 10, 13, 14, 23, 25, 25, 27, 33, 39, 45, 59, 65, 73, 82, 94, 94 ]
*/

五.归并排序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
function MergeSort(array) {
  var length = array.length;
  if (length <= 1) {
    return array;
  } else {
    var num = Math.ceil(length/2);
    var left = MergeSort(array.slice(0, num));
    var right = MergeSort(array.slice(num, length));
    return merge(left, right);
  }
}
 
function merge(left, right) {
  console.log(left);
  console.log(right);
  var a = new Array();
  while (left.length > 0 && right.length > 0) {
    if (left[0] <= right[0]) {
      var temp = left.shift();
      a.push(temp);
    } else {
      var temp = right.shift();
      a.push(temp);
    }
  }
  if (left.length > 0) {
    a = a.concat(left);
  }
  if (right.length > 0) {
    a = a.concat(right);
  }
  console.log(a);
  console.log("-----------------------------");
  return a;
}
 
var arr = [ 13, 14, 94, 33, 82, 25, 59, 94, 65, 23, 45, 27, 73, 25, 39, 10 ];
var result = MergeSort(arr);
console.log(result);
/*
[ 13 ]
[ 14 ]
[ 13, 14 ]
-----------------------------
[ 94 ]
[ 33 ]
[ 33, 94 ]
-----------------------------
[ 13, 14 ]
[ 33, 94 ]
[ 13, 14, 33, 94 ]
-----------------------------
[ 82 ]
[ 25 ]
[ 25, 82 ]
-----------------------------
[ 59 ]
[ 94 ]
[ 59, 94 ]
-----------------------------
[ 25, 82 ]
[ 59, 94 ]
[ 25, 59, 82, 94 ]
-----------------------------
[ 13, 14, 33, 94 ]
[ 25, 59, 82, 94 ]
[ 13, 14, 25, 33, 59, 82, 94, 94 ]
-----------------------------
[ 65 ]
[ 23 ]
[ 23, 65 ]
-----------------------------
[ 45 ]
[ 27 ]
[ 27, 45 ]
-----------------------------
[ 23, 65 ]
[ 27, 45 ]
[ 23, 27, 45, 65 ]
-----------------------------
[ 73 ]
[ 25 ]
[ 25, 73 ]
-----------------------------
[ 39 ]
[ 10 ]
[ 10, 39 ]
-----------------------------
[ 25, 73 ]
[ 10, 39 ]
[ 10, 25, 39, 73 ]
-----------------------------
[ 23, 27, 45, 65 ]
[ 10, 25, 39, 73 ]
[ 10, 23, 25, 27, 39, 45, 65, 73 ]
-----------------------------
[ 13, 14, 25, 33, 59, 82, 94, 94 ]
[ 10, 23, 25, 27, 39, 45, 65, 73 ]
[ 10, 13, 14, 23, 25, 25, 27, 33, 39, 45, 59, 65, 73, 82, 94, 94 ]
-----------------------------
[ 10, 13, 14, 23, 25, 25, 27, 33, 39, 45, 59, 65, 73, 82, 94, 94 ]
*/

六.快速排序  平均情况nlog2n 最好情况nlog2n 最差n2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
function QuickSort(array) {
  var length = array.length;
  if (length <= 1) {
    return array;
  } else {
    var smaller = [];
    var bigger = [];
    var base = [array[0]];
    for (var i = 1; i < length; i++) {
      if (array[i] <= base[0]) {
        smaller.push(array[i]);
      } else {
        bigger.push(array[i]);
      }
    }
    console.log(smaller.concat(base.concat(bigger)));
    console.log("-----------------------");
    return QuickSort(smaller).concat(base.concat(QuickSort(bigger)));
  }
}
 
 
var arr = [ 8, 10, 100, 90, 65, 5, 4, 10, 2, 4 ];
var result = QuickSort(arr);
console.log(result);
/*
[ 5, 4, 2, 4, 8, 10, 100, 90, 65, 10 ]
-----------------------
[ 4, 2, 4, 5 ]
-----------------------
[ 2, 4, 4 ]
-----------------------
[ 2, 4 ]
-----------------------
[ 10, 10, 100, 90, 65 ]
-----------------------
[ 90, 65, 100 ]
-----------------------
[ 65, 90 ]
-----------------------
[ 2, 4, 4, 5, 8, 10, 10, 65, 90, 100 ]
*/
这个快速排序和我们通常说的有点不同。
我们可以看百度百科的解释
有一篇java的快速排序,感觉比这个还好
代码:
function quickSort(arr, left, right) {
    var len = arr.length,
        partitionIndex,
        left = typeof left != 'number' ? 0 : left,
        right = typeof right != 'number' ? len - 1 : right;

    if (left < right) {
        partitionIndex = partition(arr, left, right);
        quickSort(arr, left, partitionIndex-1);
        quickSort(arr, partitionIndex+1, right);
    }
    return arr;
}

function partition(arr, left ,right) {     //分区操作
    var pivot = left,                      //设定基准值(pivot)
        index = pivot + 1;
    for (var i = index; i <= right; i++) {
        if (arr[i] < arr[pivot]) {
            swap(arr, i, index);
            index++;
        }        
    }
    swap(arr, pivot, index - 1);
    return index-1;
}

function swap(arr, i, j) {
    var temp = arr[i];
    arr[i] = arr[j];
    arr[j] = temp;
}

上面这个快排序有一个奇怪的现象。

我写成 left = left|| 0;这样子就报错了,我没找到原因。以后有时间请人看看吧。 

 

http://www.cnblogs.com/dushao/p/6004883.html

整数排序的几种方法

网上看到有一位大神总结的代码,先记录如下:````classSolution{public:/**@paramA:anintegerarray*@return:*/voidsortIntegers(vectorprivate://Quicksortintpartition(vectorintpivot=a[(left+right)/2];while(left<=right){//findth 查看详情

记一下javascript的几种排序算法

零、写在最前  排序的方法有很多种,这篇文章只是记录我熟悉的算法;  我发现了一个关于排序算法很有趣的网站,把相关的算法演示做成了动画,有兴趣的同学可以看看!  附上SortAnimate网站链接:http://jun-lu.github.io/S... 查看详情

java中的几种排序方法

  日常操作中常见的排序方法很多,比如有:冒泡排序、快速排序、选择排序、插入排序、希尔排序,甚至还有基数排序、鸡尾酒排序、桶排序、鸽巢排序、归并排序等。一、冒泡排序  一种简单的排序算法。它重复地走访... 查看详情

数组的几种排序

1.冒泡排序inttemp=-1;for(inti=0;i<arr.length;i++){for(intj=i+1;j<arr.length;j++){if(arr[i]>arr[j]){temp=arr[i];arr[i]=arr[j];arr[j]=temp;}}}System.out.println(Arrays.toString(arr));2.直接选择排序for(in 查看详情

js数组去重的几种方法(代码片段)

数组去重1双层for循环(类似冒泡排序的双层循环写法)vararr=[2,3,4,2,34,21,1,12,3,4,1]for(vari=0;i<arr.length;i++)//第一层:每次循环拿到arr中一个元素 for(varj=i+1;j<arr.length;j++) 查看详情

java中的几种排序算法

插入排序:自1开始,通过交换将i插入其左端的有序的数列中。交换次数不确定,但比较次数较均衡。比冒泡更优。1privatestaticvoidcharu(intx[],intoff,intlen){2for(inti=off;i<len+off;i++)3for(intj=i;j>off&&x[j-1]>x[j];j--)4swap(x,j,j-1);5}  查看详情

利用scala进行自定义排序的几种方法

#第一种方法packageday05importorg.apache.spark.rdd.RDDimportorg.apache.spark.SparkConf,SparkContextobjectSortTest1defmain(args:Array[String]):Unit=valconf:SparkConf=newSparkConf().setAppName("SortTest1" 查看详情

java中的几种比较器,对象比较,二维数组排序

Java中的几种比较器一般涉及到对象数组的排序时,我们需要比较数组中的对象进行我们想要的排序。情况一对象简单,仅仅只是比较两个引用指向同一个对象,对象的地址是否相同。用“==”即可实现情况二如... 查看详情

常见的几种算法?

1、冒泡排序冒泡排序可以算是最经典的排序算法了,两层for循环,里层循环中判断相邻两个元素比较大小,如果前者比后者大,两个元素交换位置;外层循环一次,就能将数组中剩下的元素中最小的元素“浮”到最前面,所以... 查看详情

java中的几种排序算法:冒泡排序,插入排序,二分法排序,简单排序,快速排序

冒泡排序:int[]hehe={4,7,2,5,6,9,0};for(inti=0;i<hehe.length;i++){for(intj=i+1;j<hehe.length;j++){if(hehe[i]>hehe[j]){inttemp=hehe[i];hehe[i]=hehe[j];hehe[j]=temp;}}}插入排序int[]a={13,7,8,9,10,1,2,32 查看详情

sort_contours_xld算子的几种排序方式研究

sort_contours_xld算子有5种排序方式,即: ‘upper_left‘:Thepositionisdeterminedbytheupperleftcornerofthesurroundingrectangle.‘upper_right‘:Thepositionisdeterminedbytheupperrightcornerofthesurroundingrectangle 查看详情

js的几种框架

目前来看,js框架以及一些开发包和库类有如下几个,Dojo、Scriptaculous、Prototype、yui-ext、Jquery、Mochikit、mootools、moo.fxDojo(jslibraryanduicomponent):Dojo是目前最为强大的js框架,它在自己的Wiki上给自己下了一个定义,dojo是一个用Java... 查看详情

js创建对象的几种方式

...对象的方式,难免有些困惑,现在就来总结下js创建对象的几种方式1、第一种json的方式(推荐),比较通俗易懂<script>varCat={};//JSONCat.name="jacky、";//添加属性并赋值Cat.age=22;Cat.sayHello=function(){alert(" 查看详情

java中的几种比较器,对象比较,二维数组排序(代码片段)

Java中的几种比较器一般涉及到对象数组的排序时,我们需要比较数组中的对象进行我们想要的排序。情况一对象简单,仅仅只是比较两个引用指向同一个对象,对象的地址是否相同。用“==”即可实现情况二如... 查看详情

js跳转页面的几种方法

JS的几种跳转方式:1.window.open(”url“)2.用自定义函数<script>functionopenWin(tag,obj){obj.target="_blank";obj.href="Web/Substation/Substation.aspx?stationno="+tag;obj.click();}</script><ahref="javascr 查看详情

js页面跳转常用的几种方式(转)

js页面跳转常用的几种方式转载  2010-11-25 作者:   我要评论js实现页面跳转的几种方式,需要的朋友可以参考下。第一种: 复制代码代码如下:<scriptlanguage="javascript"type="text/javascript"> window.location... 查看详情

简单选择排序的几种实现和细节

原理选择排序是每次遍历整个序列,选出其中最小的放在已排序部分的最后,所以每次排序可以让待排序区域的数量减少一个。所以实现也无非就是while循环和for循环,在交换最小值的细节上可以有两种处理方式。保... 查看详情

js面向对象的几种写法

JS中,面向对象有几种写法。归纳下,大概有下面这几种:工厂模式,构造函数模式,原型模式,构造函数与原型模式的混合使用,原型链继承,借用构造函数继承。  一、工厂模式functionperson(name,age,jpb){varo={};//定义o这个... 查看详情