js实现归并排序
function merge(s_arr, d_arr, start, middle, end){
var s_temp = start;
var m_temp = middle+1;
var temp;
var d = start;
for(;s_temp <= middle && m_temp <= end; d++){
if(s_arr[s_temp] < s_arr[m_temp]){
d_arr[d] = s_arr[s_temp];
s_temp++;
}else{
d_arr[d] = s_arr[m_temp];
m_temp++;
}
}
if(s_temp <= middle){
for(temp = 0;temp <= middle -s_temp; temp++){
d_arr[d + temp] = s_arr[s_temp + temp];
}
}
if(m_temp <= end){
for(temp = 0;temp <= end -m_temp; temp++){
d_arr[d+temp] = s_arr[m_temp + temp];
}
}
}
// var arr1 = [1, 4, 8, 10, 2, 5, 9, 11];
// var arr2 = [];
// merge(arr1, arr2, 0, 1, 2);
function merge_sort(arr){
sort_merge(arr, arr, 0, arr.length-1);
}
function sort_merge(s_arr, d_arr, start, end){
if(start == end){
d_arr[start] = s_arr[start];
}else{
var m = parseInt((start + end)/2);
//console.log(m);
sort_merge(s_arr, d_arr2, start, m);
sort_merge(s_arr, d_arr2, m + 1, end);
merge(d_arr2, d_arr,start, m, end);
}
}
merge_sort(arr)
console.log(arr);
归并排序要点
1.将要排序的数组递归的进行切分为start,middle,end三部分
2.将排好序的start-middle与middle-end合并为一个数组
function merge_sort(arr){
_sort_merge(arr, arr, 0, arr.length -1);
}
function _sort_merge(src, desc, start, end){
var tmp_arr = [];
if(start == end){
desc[start] = src[start];
}else{
var m = parseInt((start + end)/2);
_sort_merge(src, tmp_arr, start, m);
_sort_merge(src, tmp_arr, m + 1, end);
merge(tmp_arr, desc, start, m, end);
}
}
function merge(src, desc, start, m, end){
var i = start,j = m + 1, index = start;
while(i <= m && j <= end){
if(src[i] > src[j]){
desc[index] = src[i];
index++;
i++;
}else{
desc[index] = src[j];
index++;
j++;
}
}
while(i <= m){
desc[index] = src[i];
index++;
i++;
}
while( j <= end){
desc[index] = src[j];
index++;
j++;
}
}
var arr = [22, 31, 1, 9, 99, 68, 55, 30];
merge_sort(arr);
console.log(arr);
js实现归并排序的更多相关文章
- 基于JS实现归并排序算法
/*********************************************JS归并排序************************************************ ...
- javascript排序 查找算法大全
在pptv的实习结束了, 忙着找工作的事,顺便把数据结构的那本书重新复习了一遍.为了加深印象,特意把里面的常用的排序.查找算法用js写了一遍 具体的实例在我的github上,大家可以访问的: http ...
- js归并排序
js归并排序 function mergeSort (arr){ if (arr.length < 2){ //控制语句,结束递归 return arr; } var middle = Math ...
- js排序算法04——归并排序
归并排序是一种分治算法.思想是把原数组切分成较小的数组,直到每个小数组只有一个位置,再将小数组归并成较大的数组,直到最后有一个完整有序的大数组. js实现如下: function mergeSort( ...
- 归并排序算法及其JS实现
归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(con ...
- js实现冒泡排序(bubble sort)快速排序(quick sort)归并排序(merge sort)
排序问题相信大家都比较熟悉了.用js简单写了一下几种常用的排序实现.其中使用了es6的一些语法,并且不仅限于数字--支持各种类型的数据的排序.那么直接上代码: function compare (a, ...
- 使用 js 实现十大排序算法: 归并排序
使用 js 实现十大排序算法: 归并排序 归并排序 refs js 十大排序算法 All In One https://www.cnblogs.com/xgqfrms/p/13947122.html ...
- JS快速排序 希尔排序 归并排序 选择排序
/* 快速排序 1.1 算法描述 快速排序由于排序效率在同为O(N*logN)的几种排序方法中效率较高,因此经常被采用,再加上快速排序思想----分治法也确实实用.快速排序是一种既不浪费空间又可以快一 ...
- js 实现排序算法 -- 归并排序(Merge Sort)
原文: 十大经典排序算法(动图演示) 归并排序 归并排序是建立在归并操作上的一种有效的排序算法.该算法是采用分治法(Divide and Conquer)的一个非常典型的应用.将已有序的子序列合并,得 ...
随机推荐
- LinkButton(按钮)
使用$.fn.linkbutton.defaults重写默认值对象. 按钮组件使用超链接按钮创建.它使用一个普通的<a>标签进行展示.它可以同时显示一个图标和文本,或只有图标或文字.按钮的 ...
- rop框架签名功能控制
平台级控制: 通过<rop:annotation-driven/>的 sign-enable 属性即可开启或关闭服务平台签名验证功能:<rop:annotation-driven s ...
- [HDU 4089]Activation[概率DP]
题意: 有n个人排队等着在官网上激活游戏.Tomato排在第m个. 对于队列中的第一个人.有以下情况: 1.激活失败,留在队列中等待下一次激活(概率为p1) 2.失去连接,出队列,然后排在队列的最后( ...
- js正则验证手机号
var regp = /^(\+86|86|)1[3458][0-9]{9}$/; if(str==""){ var flag = checkstatus(obj,"&q ...
- PHP- Windows无法在本地计算机启动Apache的解决方法
装好了WAMP,开始可以进行我的PHP学习了.可是装后却打不开locahost. 百度后如下解决了:"Windows不能在本地计算机启动Apache2.有关更多信息,查阅系统事件日志.如果这 ...
- 对.NET的认识
.NET其实就是一个软件平台,这个平台和Java平台有许多的相似之处,主要表现在 1.二者编写的程序都是可以跨平台执行的 2.二者编写的程序编译后生成的都是一种中间码(IL),需要经过第二次编译才 ...
- NET程序的破解--静态分析(Xenocode Fox 2006 Evaluation)
NET程序已经红红火火的兴起,就象LINUX一样势不可挡的涌来.作为一名Cracker,你会选择躲避吗?嘿嘿,对俺而言,挑战更富有趣味. 破解好几个.NET的程序了,一直想写出来,只是时间问题,所以拖 ...
- [前端JS学习笔记]JavaScript prototype 对象
一.概念介绍 prototype 对象 : 原型对象.在JavaScript中, 每一个对象都继承了另一个对象,后者称为"原型对象". 只有 null 除外,它没有自己的原型对象. ...
- linux中crontab实现以秒执行任务
用crontab+sleep实现以秒执行任务 crontab -e * * * * * /bin/date >>/tmp/date.txt * * * * * sleep 10s; /bi ...
- Android Studio安装及主题字体配置
在2013 Google I/O 大会上,谷歌推出了自家全新的安卓软件集成开发工具 Android Studio,这是 Google 基于 IntelliJ IDEA 改动而来. 谷歌称 Androi ...