Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit7a2f529

Browse files
committed
Add merge sort
1 parent7546124 commit7a2f529

File tree

3 files changed

+92
-0
lines changed

3 files changed

+92
-0
lines changed
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
tracer._print('original array = ['+D.join(', ')+']');
2+
tracer._sleep(1000);
3+
tracer._pace(500);
4+
5+
functionmergeSort(start,end){
6+
if(Math.abs(end-start)<=1){
7+
return[];
8+
}
9+
10+
varmiddle=Math.ceil((start+end)/2);
11+
12+
mergeSort(start,middle);
13+
mergeSort(middle,end);
14+
15+
tracer._print('divide left['+start+', '+(middle-1)+'], right['+(middle)+', '+(end-1)+']');
16+
17+
returnmergeSort.merge(start,middle,end);
18+
}
19+
20+
mergeSort.merge=function(start,middle,end){
21+
varleft=Array();
22+
varright=Array();
23+
24+
varleftSize=middle-start;
25+
varrightSize=end-middle;
26+
varmaxSize=Math.max(leftSize,rightSize);
27+
varsize=end-start;
28+
vari;
29+
30+
for(i=0;i<maxSize;i++){
31+
if(i<leftSize){
32+
left.push(D[start+i]);
33+
tracer._select(start+i);
34+
tracer._print('insert value into left array['+i+'] = '+D[start+i]);
35+
}
36+
if(i<rightSize){
37+
right.push(D[middle+i]);
38+
tracer._select(middle+i);
39+
tracer._print('insert value into right array['+i+'] = '+D[middle+i]);
40+
}
41+
}
42+
tracer._print('left array = ['+left.join(', ')+'],'+'right array = ['+right.join(', ')+']');
43+
44+
i=0;
45+
while(i<size){
46+
if(left[0]&&right[0]){
47+
if(left[0]>right[0]){
48+
D[start+i]=right.shift();
49+
tracer._print('rewrite from right array['+i+'] = '+D[start+i]);
50+
}else{
51+
D[start+i]=left.shift();
52+
tracer._print('rewrite from left array['+i+'] = '+D[start+i]);
53+
}
54+
}elseif(left[0]){
55+
D[start+i]=left.shift();
56+
tracer._print('rewrite from left array['+i+'] = '+D[start+i]);
57+
}else{
58+
D[start+i]=right.shift();
59+
tracer._print('rewrite from right array['+i+'] = '+D[start+i]);
60+
}
61+
62+
tracer._deselect(start+i);
63+
tracer._notify(start+i);
64+
65+
i++;
66+
}
67+
68+
tempArray=Array();
69+
for(i=start;i<end;i++){
70+
tempArray.push(D[i]);
71+
}
72+
tracer._print('merged array = ['+tempArray.join(', ')+']');
73+
}
74+
75+
mergeSort(0,D.length)
76+
tracer._print('sorted array = ['+D.join(', ')+']');
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
vartracer=newArray1DTracer();
2+
varD=Array1D.random(15);
3+
tracer._setData(D);

‎algorithm/sorting/merge/desc.json‎

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
{
2+
"Quicksort":"In computer science, merge sort (also commonly spelled mergesort) is an efficient, general-purpose, comparison-based sorting algorithm. Most implementations produce a stable sort, which means that the implementation preserves the input order of equal elements in the sorted output. Mergesort is a divide and conquer algorithm that was invented by John von Neumann in 1945. A detailed description and analysis of bottom-up mergesort appeared in a report by Goldstine and Neumann as early as 1948.",
3+
"Complexity": {
4+
"time":"average O(n log n)",
5+
"space":"worst O(n)"
6+
},
7+
"References": [
8+
"<a href='https://en.wikipedia.org/wiki/Merge_sort'>Wikipedia</a>"
9+
],
10+
"files": {
11+
"basic":"Basic"
12+
}
13+
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp