Skip to content

Commit c2c5864

Browse files
authored
Add files via upload
1 parent 3553d8e commit c2c5864

File tree

2 files changed

+124
-0
lines changed

2 files changed

+124
-0
lines changed
+59
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
// sorting.cpp : This file contains the 'main' function. Program execution begins and ends there.
2+
//
3+
#include<stdio.h>
4+
5+
void Merge(int A[], int l, int mid, int h) // this is for two array inside one array
6+
{
7+
int i = l, j = mid + 1, k = l; // it sud be initizlized
8+
int B[100];
9+
10+
while (i <= mid && j <= h)
11+
{
12+
if (A[i] < A[j])
13+
B[k++] = A[i++]; // copy element from a to b
14+
else
15+
B[k++] = A[j++]; // copy element from another side of a to b
16+
}
17+
for (; i <= mid; i++)
18+
B[k++] = A[i];
19+
for (; j <= h; j++)
20+
B[k++] = A[j];
21+
22+
for (i = l; i <= h; i++) // this is for copy all the elements from B to A( back )
23+
A[i] = B[i];
24+
}
25+
void IMergeSort(int A[], int n)
26+
{
27+
int p, l, h, mid, i;
28+
for (p = 2; p <= n; p = p * 2) // for passes // always list size will be doubled
29+
{
30+
for (i = 0; i + p - 1 < n; i = i + p) // for the sub lsit // merging all list in a single pass // i sud incremented by i + p
31+
{
32+
l = i; // every pass modify the low , mid and high value
33+
h = i + p - 1;
34+
mid = (l + h) / 2;
35+
Merge(A, l, mid, h); // call merge fxn
36+
}
37+
if (n - i > p / 2)
38+
{
39+
l = i;
40+
h = i + p - 1;
41+
mid = (l + h) / 2;
42+
Merge(A, l, mid, n - 1);
43+
}
44+
}
45+
if (p / 2 < n) // if there are some more elements remaning then we sud merge it as it is
46+
{
47+
Merge(A, 0, p / 2 - 1, n - 1); // call merge
48+
}
49+
}
50+
int main()
51+
{
52+
int A[] = { 11,5,14,2,6,3,1 }, n = 7, i;
53+
IMergeSort(A, n);
54+
for (i = 0; i < n; i++)
55+
printf("%d ", A[i]);
56+
printf("\n");
57+
return 0;
58+
}
59+
// time complexity = o(m+n)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
#include <iostream>
2+
3+
using namespace std;
4+
5+
template <class T>
6+
void Print(T& vec, int n, string s){
7+
cout << s << ": [" << flush;
8+
for (int i=0; i<n; i++){
9+
cout << vec[i] << flush;
10+
if (i < n-1){
11+
cout << ", " << flush;
12+
}
13+
}
14+
cout << "]" << endl;
15+
}
16+
17+
void Merge(int A[], int low, int mid, int high){
18+
int i = low;
19+
int j = mid+1;
20+
int k = low;
21+
int B[high+1];
22+
while (i <= mid && j <= high){
23+
if (A[i] < A[j]){
24+
B[k++] = A[i++];
25+
} else {
26+
B[k++] = A[j++];
27+
}
28+
}
29+
while (i <= mid){
30+
B[k++] = A[i++];
31+
}
32+
while (j <= high){
33+
B[k++] = A[j++];
34+
}
35+
for (int i=low; i<=high; i++){
36+
A[i] = B[i];
37+
}
38+
}
39+
40+
void IterativeMergeSort(int A[], int n){
41+
int p;
42+
for (p=2; p<=n; p=p*2){
43+
for (int i=0; i+p-1<n; i=i+p){
44+
int low = i;
45+
int high = i+p-1;
46+
int mid = (low+high)/2;
47+
Merge(A, low, mid, high);
48+
}
49+
}
50+
if (p/2 < n){
51+
Merge(A, 0, p/2-1, n-1);
52+
}
53+
}
54+
55+
int main() {
56+
57+
int A[] = {2, 5, 8, 12, 3, 6, 7, 10};
58+
int n = sizeof(A)/sizeof(A[0]);
59+
60+
Print(A, n, "\t\tA");
61+
IterativeMergeSort(A, n);
62+
Print(A, n, " Sorted A");
63+
64+
return 0;
65+
}

0 commit comments

Comments
 (0)