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)的一个非常典型的应用.将已有序的子序列合并,得 ...
随机推荐
- jemalloc优化MySQL、Nginx内存管理
上一篇文章<TCMalloc优化MySQL.Nginx.Redis内存管理>,下面来看下jemalloc jemalloc源于Jason Evans 2006年在BSDcan confer ...
- [iOS基础控件 - 6.9.3] QQ好友列表Demo TableView
A.需求 1.使用plist数据,展示类似QQ好友列表的分组.组内成员显示缩进功能 2.组名使用Header,展示箭头图标.组名.组内人数和上线人数 3.点击组名,伸展.缩回好友组 code so ...
- UVa 1252 Twenty Questions (状压DP+记忆化搜索)
题意:有n件物品,每件物品有m个特征,可以对特征进行询问,询问的结果是得知某个物体是否含有该特征,要把所有的物品区分出来(n个物品的特征都互不相同), 最小需要多少次询问? 析:我们假设心中想的那个物 ...
- Spring Data JPA Tutorial Part Nine: Conclusions(未翻译)
This is the ninth and the last part of my Spring Data JPA tutorial. Now it is time to take a look of ...
- The plot Function in matlab
from http://pundit.pratt.duke.edu/wiki/MATLAB:Plotting The plot Function The plot function is used t ...
- 对同一元素设置overflow-x:hidden,overflow-y:visible;属性值不生效
作者:孙志勇 微博 日期:2016年12月5日 一.时效性 所有信息都具有时效性.文章的价值,往往跟时间有很大关联.特别是技术类文章,请注意本文创建时间,如果本文过于久远,请读者酌情考量,莫要浪费时间 ...
- poj 1087 C - A Plug for UNIX 网络流最大流
C - A Plug for UNIXTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/contes ...
- w3cmark前端精彩博文周报 10.20-10.27
w3cmark 官方Q群 145423956 | 官方微博 @w3cmark 自从最近微博屏蔽了我的站点域名,就很懒了.毕竟和不爽,一个纯技术站点还被认为不安全链接,还申诉无门,那些所谓的客服都是自动 ...
- oc-02-NSLog使用
#import <Foundation/Foundation.h> /* NSLog() : C语言中的 printf的增强版 作用: 向控制台输出打印数据. 增强的地方 : 打印时间 , ...
- C 高级编程 2 内存管理
理解malloc的工作原理: malloc使用一个数据结构(链表)来维护分配的空间.链表的构成: 分配的空间.上一个空间的地址.下一个空间的地址.以及本空间的信息等. 对malloc分配的空间不要越界 ...