NEP -DAA -DESIGN AND ANALYSIS OF ALOGRITHM

PROGRAM 1 PROGRAM 2 PROGRAM 3 PROGRAM 4 PROGRAM 5 PROGRAM 6 PROGRAM 7 PROGRAM 8 PROGRAM 9 PROGRAM 10 PROGRAM 11 PROGRAM 12

PART B

PROGRAM B1 PROGRAM B2 PROGRAM B3 PROGRAM B4 PROGRAM B5 PROGRAM B6 PROGRAM B7 PROGRAM B8 . . .

 
  
#Write a program to implement Merge sort algorithm for sorting a list of integers in ascending order

# function to merge two sorted arrays
merge <- function(a, b) {
	# create temporary array
	temp <- numeric(length(a) + length(b))

	# take two variables which initially points to 
	# starting of the sorted sub arrays 
	# and j which points to starting of starting 
	# of temporary array 
	astart <- 1 
	bstart <- 1 
	j <- 1
	for(j in 1 : length(temp)) {
		# if a[astart] < b[bstart]
		if((astart <= length(a) && 
			a[astart] < b[bstart]) || 
			bstart > length(b)) {
			# insert a[astart] in temp and increment 
			# astart pointer to next
			temp[j] <- a[astart]
			astart <- astart + 1
		} 
	else {
			temp[j] <- b[bstart]
			bstart <- bstart + 1		 
		}
	}
	temp
}

# function to sort the array
mergeSort <- function(arr) {

	# if length of array is greater than 1, 
	# then perform sorting
	if(length(arr) > 1) {
	
		# find mid point through which 
		# array need to be divided
		mid <- ceiling(length(arr)/2)
	
		# first part of array will be from 1 to mid
		a <- mergeSort(arr[1:mid])
	
		# second part of array will be 
		# from (mid+1) to length(arr)
		b <- mergeSort(arr[(mid+1):length(arr)])
	
		# merge above sorted arrays
		merge(a, b)
	}
# else just return arr with single element
else {
		arr
	}
}

# take sample input
arr <- sample(1:100, 10)

# call mergeSort function
result <- mergeSort(arr)

# print result
print(result)