Merging
is the process of combining two or more sorted files into a third
sorted file. Merge sort is based on the divide and conquer paradigm. It
can be explained as …. Let A[p…..r] is given array with indices p = 1 to
r = n. Then steps can be
Image Source: http://en.wikipedia.org/wiki/Merge_sort
- Divide Step: If a given array A has zero or one element, then simply return; it is already sorted. Otherwise split A[p…..r] into two subarrays as A[p….q] and A[q+1…..r] each containing about the half of the elements.
- Conquer Step: Conquer by recursively sorted the two sub-arrays A[p….q] and A[q+1….r]
Source Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
| #include<iostream>using namespace std;//create a class MergeSortclass MergeSort{ public: int no_of_elements; int elements[10]; public: void getarray(); void partition(int [] ,int ,int); void sortit(int [], int , int, int); void display();};// get the array to be sorted from the uservoid MergeSort::getarray(){ cout<<"How many elements?: "; cin>>no_of_elements; cout<<"Insert elements to sort: "; for(int i=0;i<no_of_elements;i++){ cin>>elements[i]; }}// recursively divide the array into sub arrays until all sub// arrays contain only one elementvoid MergeSort::partition(int elements[], int low, int high){ int mid; if(low<high){ mid=(low+high)/2; // sort the left sub array partition(elements,low,mid); // sort the right sub array partition(elements,mid+1,high); sortit(elements,low,mid,high); }}void MergeSort::sortit(int elements[], int low, int mid, int high){ int i,j,k,l,b[20]; l=low; i=low; j=mid+1; while((l<=mid)&&(j<=high)){ if(elements[l]<=elements[j]){ b[i]=elements[l]; l++; }else{ b[i]=elements[j]; j++; } i++; } if(l>mid){ for(k=j;k<=high;k++){ b[i]=elements[k]; i++; } }else{ for(k=l;k<=mid;k++){ b[i]=elements[k]; i++; } } for(k=low;k<=high;k++){ elements[k]=b[k]; }}void MergeSort::display(){ cout<<"The sorted element is\n"; for(int i = 0 ; i < no_of_elements; i++){ cout<<elements[i]<<" "; }}int main(){ MergeSort MS; MS.getarray(); MS.partition(MS.elements,0,MS.no_of_elements); MS.display(); return 0;} |
Output:
Insert element to sort: 63 78 52 12 99 32 13
The sorted element is
12 13 32 52 63 78 99


19:35
Unknown

0 comments:
Post a Comment