请用JavaScript语言实现 sort 排序函数,要求:sort([5, 100, 6, 3, -12]) // 返回
[-12, 3, 5, 6, 100]。
如果你有多种解法,请阐述各种解法的思路及优缺点。(仅需用代码实现一种解法,其它解法用文字阐述思路即可)
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); } } } }
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; }
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; };