三种排序方式

<!DOCTYPE html>
<html>
<head>
  <title></title>
</head>
<body>
<script type="text/javascript">
//选择排序
        function xuanzepaixu() {
            var min/*最小项的索引*/, tmp;
            for (var out = 0; out < a.length - 1; out++) {//比较的次数是length-1
                min = out;
                for (var inner = out + 1; inner < a.length; inner++) {//这里是a.length,不是a.lenght-1,因为后者会导致右数第2项没法参与排序。
                    if (a[inner] < a[min]) {
                        min = inner;
                    }
                    //将最小的项移动到左侧
                    tmp = a[out];
                    a[out] = a[min]
                    a[min] = tmp;
                }
            }
            alert(a);
        };

      var  a = [66, 53, 11, 5, 4, 3, 2, 1];
        xuanzepaixu(a)
//冒泡排序
        function bubbleSort() {
            for (var i = 0; i < a.length - 1; i++) {//比较的次数是length-1
                for (var j = 0; j < a.length - 1 - i; j++) {
                    if (a[j] > a[j + 1]) {
                        var tmp = a[j];
                        a[j] = a[j + 1];
                        a[j + 1] = tmp;
                    }
                }
            }
            alert(a);
        };

      var a = [66, 53, 11, 5, 4, 3, 2, 1];
        bubbleSort(a)
//快速排序
  function quickSort(arr){
  if(arr.length<=1){
    return arr;//如果数组只有一个数,就直接返回;
  }
 
  var num = Math.floor(arr.length/2);//找到中间数的索引值,如果是浮点数,则向下取整
  var numValue = arr.splice(num,1);//找到中间数的值
  var left = [];
  var right = [];
 
  for(var i=0;i<arr.length;i++){
    if(arr[i]<numValue){
      left.push(arr[i]);//基准点的左边的数传到左边数组
    }
    else{
      right.push(arr[i]);//基准点的右边的数传到右边数组
    }
  }
 return quickSort(left).concat([numValue],quickSort(right));//递归不断重复比较
}
alert(quickSort([32,45,37,16,2,87]));//弹出“2,16,32,37,45,87”
</script>
</body>
</html>

版权声明:本文为博主原创文章,未经博主允许不得转载。

posted on 2015-09-06 16:31  xiaomie  阅读(199)  评论(0编辑  收藏  举报

导航