CS 253: Homework # 2 Part 1: Consider the following loop construct: X := 1 repeat Y := N while Y > 0 do . . . // something (the ellipsis) Y := Y - 1 endwhile X := X + X until X > N * N Categorize its efficiency in terms of the variable N using big-O notation. Also, assume that the statements represented by the ellipsis require four main memory accesses with each access requiring 1 microsecond, and two disk file accesses with each requiring 1 millisecond. Express in milliseconds the amount of time this construct would require to execute if N = 1000. Part 2: Extend your sorting framework with two advanced sorting methods of your choice: (Shell Sort OR Radix Sort) AND (Merge Sort OR Quick Sort). If you choose Shell Sort, experiment with different incremental sequences to see how they affect the algorithm's run time efficiency (count the number of comparisons and exchanges). If you choose to implement Radix Sort, answer the following question as well: Can you write a version of Radix Sort to work with real numbers? If yes, show me how. If not, explain why. Compare the advanced sorting methods that you have implemented to elementary sorts from homework 1. Explain the results generated by your program (do not forget to experiment with best / worst / avarage cases, if applicable).