首页 > 试题广场 >

请用JavaScript语言实现 sort 排序函数,其中要

[问答题]
请用JavaScript语言实现 sort 排序函数,要求:sort([5, 100, 6, 3, -12]) // 返回 [-12, 3, 5, 6, 100]。
如果你有多种解法,请阐述各种解法的思路及优缺点。(仅需用代码实现一种解法,其它解法用文字阐述思路即可)
推荐
function sort(arr){
 for(var i=0;i<arr.length-1;i++){
 for(var j=0;j<arr.length-i-1;j++){
 if(arr[j]>arr[j+1]){
 var hand=arr[j];
 arr[j]=arr[j+1];
 arr[j+1]=hand;
 }
 }
 }
 return arr;
}

编辑于 2015-01-28 10:26:45 回复(3)
var arr = [-12,3,5,6,100];
arr.sort(function(a,b){
    return a-b;
});
发表于 2015-07-11 17:13:20 回复(0)
function sort(oneArray){
var resultArray = oneArray.sort(function(v1,v2){
return v1-v2;
});
return resultArray;
}

console.log(sort([5, 100, 6, 3, -12]));

发表于 2017-02-18 15:10:56 回复(0)
var arr = [-12,,3,5,6,100]; arr.sort((function(a,b){ if(a-b > 0) { return true; } }))
发表于 2014-10-30 14:11:35 回复(0)
function sort(arr){
sort.apply(this,arr);
}
1、将整个数组作为参数传给原生sort.apply
2、将数组转换为参数的字符串,传递给原生sort函数
发表于 2017-08-23 18:34:53 回复(0)
//这里应该是考排序算法,如冒泡,插入,快排等
这里用冒泡实现,缺点:时间复杂度为O(n^2),优点就是稳定,容易理解
思路:先两两比较,小的放前面,大的放后面,找到arr里面最大的数,放在最后面,然后在剩下的数里面继续找最大的放最后面
function exchange(arr,x,y){
    var tem = arr[x];
    arr[x] = arr[y];
    arr[y] = tem; 
}
function sort(arr){
    for(var i=0;i<arr.length-1;i++){
        for(var y=0;y<arr.lenth-i-1;y++){
            if(arr[y]>arr[y+1]){
                exchange(arr,y,y+1);
            }
        }
    }
}

发表于 2017-08-07 22:15:11 回复(0)
var sort = function(array){
  quicksort(array,0,array.length-1);
  return array;
}

var quicksort = function(A,lo,hi){
  if (lo<hi) {
    var q = partition(A,lo,hi);
    quicksort(A,lo,q-1);
    quicksort(A,q+1,hi);
  }  
}

var partition = function(A,lo,hi) {  
  var pivot = A[hi];
  var i = lo - 1;
  for(var j = lo;j <= hi-1; j++){
    if (A[j]<pivot) {
      i++;
      var tmp = A[i];
      A[i] = A[j];
      A[j] = tmp;
    }
  }
  var tt = A[i+1];
  A[i+1] = A[hi];
  A[hi] = tt;

  return i+1;
}
发表于 2016-07-29 15:48:19 回复(0)
array.sort(a,b=> a-b)
发表于 2016-04-20 00:07:14 回复(0)
function sort(arr)//采用冒泡排序 { for(var i=0;i<arr.length;i++)
    { var exchange=0; for(var j=0;j<arr.length-i;j++)
        { if(arr[j]>arr[j+1])
            { var temp=arr[j];
                arr[j]=arr[j+1];
                arr[j+1]=temp; exchange=1;
            }
        } if(!exchange){return arr};
    } return arr;
}

编辑于 2016-03-18 22:29:09 回复(0)
E T头像 E T
1
2
3
4
vararr = [-12,3,5,6,100];
arr.sort(function(a,b){
    returna-b;
});

发表于 2015-08-17 18:37:07 回复(0)
br头像 br
function compare(value1,value2){
    if (value1<value2) {
        return -1;
    }else if (value1>value2) {
        return 1;
    }else{
        return 0;
    };
}
var  mysort = [5, 100, 6, 3, -12];
mysort.sort(compare);
发表于 2015-08-16 15:45:55 回复(0)
function Sort(arr){
        //快速排序

if(arr.length <=1){
return arr;
}

//取中间数值
var standardNum = arr.splice(Math.floor(arr.length / 2),1);
var leftArr = [];
var rightArr = [];
        for(var i=0; i<arr.length; i++){
            if(arr[i]<=standardNum){
leftArr.push(arr[i]);
    }else{
rightArr.push(arr[i]);
    }
        }
return Sort(leftArr).concat(standardNum,Sort(rightArr));

}

Sort([5, 100, 6, 3, -12]); //[-12, 3, 5, 6, 100]
发表于 2015-07-08 18:15:46 回复(0)
var isArray = function(array) {
    if (typeof Array.isArray !== "function") {
        return Array.isArray(array);
    }else {
        return Object.prototype.toString.call(array) === "[object Array]";
    }
}

var sort = function(array) {

        //异常处理
        if (!isArray(array)) {
            throw new Error("sort():input arguments must be an array");
        }

        var result = array.concat(),
            i,
            len = result.length,
            j,
            temp;

        for (i = 0; i < len; i++) {

            for (j = i; j < len; j++) {

                if (result[i] > result[j]) {
                    temp = result[i];
                    result[i] = result[j];
                    result[j] = temp;
                }
            }
        }

        return result;
    };


发表于 2015-06-14 09:08:25 回复(0)
//冒泡
var a=[5,100,6,3,-12];
for (i=0 ;i<a.length ;i++){
    for(j=0;j<i;j++) {
     if(a[j]>a[i]){
        maxtem = a[j];
        a[j]=a[i];
        a[i]=maxtem
    }
  } 
}
console.log(a);
发表于 2015-05-05 11:26:05 回复(1)
<!DOCTYPE html>
<html>
   <head>
   <script>
        Array.prototype.sort=function(){
          for(var i=0;i<this.length-1;i++){
            for(var j=i+1;j<this.length;j++){
               if(this[j]<this[i]){
                   var temp;
                   temp=this[j];
                    this[j]=this[i];
                   this[i]=temp
                } 
            } 
 
           }
        return this;
        };
alert([5, 100, 6, 3, -12].sort());
</script>
   </head>
   <body>
   </body>
</html>
发表于 2015-03-30 12:51:04 回复(0)
var a = [5,100,6,3,-12];
var b = [];
b[0] = a[0];
for(var i =0,j=0, i < a.length();i++){    
   while(a[i] > b[j]){
      t = b[j];
     b[j++] = a[i];
      b[j] = t;
   } 
发表于 2015-03-29 16:01:54 回复(0)
var arr = [5, 100, 6,3,-12];
function compare(value1, value2){
    return value2-value1;
}
arr.sort(compare);
此方法对于数值型或者valueOf()方***返回数值型的对象类型;
也可以用if进行连个值的大小的判断返回来做;
发表于 2015-03-26 16:55:36 回复(0)
var array = [5, 100, 6, 3, -12];
array.sort(function (a, b) {
    return b - a;
})
发表于 2014-12-23 22:03:07 回复(0)
function sort(n,m){
    return n-m;
}
发表于 2014-12-22 21:03:19 回复(0)
function sort(var arr){
var small;
for(var i=1; i<arr.length; i++){
      small=arr[i];
for(var j=i-1; i>0 && arr[j] >small; j--){
    arr[j+1]=arr[j];
}
   arr[j+1]=small;
}

}([5,100,6,3,-12]);

我这里用的是数据结构中的直接插入法,也可以用冒泡法和希尔排序等方法
发表于 2014-12-19 16:33:51 回复(0)
/*快速排序实现方法*/
function quickSort(arr){
//长度少于1直接返回
if(arr.length <= 1){
return arr;
}
var less  = new Array();
var greater  = new Array();
//选择一个值做为基准
var pivotIndex  = Math.floor(arr.length / 2);
var pivot  = arr.splice(pivotIndex, 1) [0];
//遍历数组
for(var i = 0; i<arr.length; i++ ){
if( arr[i] < pivot ){
less.push(arr[i]);
}else{
greater.push(arr[i]);
}
}
//递归调用返回排序好的数组
return quickSort(greater).concat([pivot], quickSort(less));
}
发表于 2014-12-16 23:46:47 回复(0)