您的位置:首页 > Web前端 > JavaScript

js各种排序汇总

2017-08-21 23:32 169 查看

js排序汇总

//排序1
function sort1(arr){
for(var i=1;i<arr.length;i++){
for(var j=0;j<arr.length-1;j++){
if(arr[i]<arr[j]){
var temp;
temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
}
}
arr.push();//
console.log(arr);
}
//    冒泡排序
function sort2(arr){
for(var i=0;i<arr.length;i++){
for(var j=arr.length-1;j>0;j--){
if(arr[j]<arr[j-1]){
var temp=arr[j];
arr[j]=arr[j-1];
arr[j-1]=temp;
}
}
}
arr.push();
console.log(typeof(arr));//object
console.log(arr);
}
sort1([32,15,56,78,2]);//Array [ 2, 15, 32, 56, 78 ]
sort2([32,15,56,78,1]);
//    排序函数
function compare2(num1,num2){
return num1-num2;//从小到大
}
var nums=[0,15,5,10,3,156,30];
nums.sort(compare2);
console.log(nums);
// 快速排序1
var quickSort = function(arr) {
if (arr.length <= 1) {
return arr; }
var pivotIndex = Math.floor(arr.length/2);
var pivot = arr.splice(pivotIndex,1);
// alert(pivot);
var left = [];
var right = [];
for (var i = 0; i < arr.length; i++){
if (arr[i] < pivot) {
left.push(arr[i]);
} else {
right.push(arr[i]);
}
}
//        递归
return quickSort(left).concat([pivot], quickSort(right));
};
console.log(quickSort([32,15,56,78,1,96,36]));
//JS实现快速排序(从小到大排列)
Array.prototype.quickSort = function() {
quickSortHelper(this, 0, this.length-1);
//确定哨兵, 递归分离
function quickSortHelper(arr, start, end) {
if(start < end){                //快排结束条件start>=end
//获取哨兵的位置
var part = partation(arr, start, end);

//根据递归实现排序
arguments.callee(arr, start, part-1);
arguments.callee(arr, part+1, end);
}
}
function partation(arr, start, end) {
var pivot = arr[end];              //设置哨兵
var i = start;                      //交换的次数+1 哨兵要在数组插入的位置
for(var j=start; j<end; j++) {
if(arr[j] < pivot) {
swap(arr, i, j);
i++;
}
}
swap(arr, i, end);
return i;
}
//交换数组元素的值
function swap(arr, i, j) {
var temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
};
//------------------- test ------
var arr = [5, 2, 3, 1, 4];
arr.quickSort();
console.log(arr);
//--------------直接插入排序-----
function inSort(arr){
for(var i=1;i<arr.length;i++){
var x=arr[i];
for(var j=i-1;j>-1;j--){
if(arr[j]>x) arr[j+1]=arr[j];
else break;
}
arr[j+1]=x;
}
console.log(arr);
}
inSort([32,15,56,78,1,8]);
//--------------------选择排序------
function selectSort(arr){
for(var i=0;i<arr.length-1;i++){
var min=i;
for(var j=i+1;j<arr.length;j++){
if(arr[j]<arr[min]){
min=j;
}
if(i-min){
var temp=arr[min];
arr[min]=arr[i];
arr[i]=temp;
}

}
}
console.log(arr);
}
selectSort([3,2,5,8,4,7,6,9]);
//------归并排序------
function mergeSort(items) {
if (items.length < 2) {
return items;
}

var middle = Math.floor(items.length / 2),
left = items.slice(0, middle),
right = items.slice(middle),
params = merge(mergeSort(left), mergeSort(right));

params.unshift(0, items.length);
console.log(params);
//        return sum1.apply(this,[num1,num2]);
items.splice.apply(items, params);
console.log(items);
return items;

function merge(left, right) {
var result = [],
il = 0,
ir = 0;

while (il < left.length && ir < right.length) {
if (left[il] < right[ir]) {
result.push(left[il++]);
} else {
result.push(right[ir++]);
}
}
return result.concat(left.slice(il)) .concat(right.slice(ir));
}
}

// test
var arrT = [2, 1, 3, 12, 5, 66, 23, 87, 15, 32];
console.log(mergeSort(arrT));
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: