Sorting Floats

Finding the Smallest Element

Now we would like you to implement a sorting algorithm, based on selection sort:

  • Create a new file sort.c.

  • Declare a constant global array data with static linkage and containing the following 50 float numbers:

    18042893.83, 8469308.86, 16816927.77, 17146369.15, 19577477.93, 4242383.35, -7198853.86, 16497604.92, 5965166.49, 11896414.21, 10252023.62, 13504900.27, 7833686.90, 11025200.59, 20448977.63, 19675139.26, 13651805.40, 15403834.26, 3040891.72, 13034557.36, 350052.11, 5215953.68, 2947025.67, 17269564.29, 3364657.82, 8610215.30, 2787228.62, 2336651.23, 21451740.67, 4687031.35, 11015139.29, 18019798.02, 13156340.22, 6357230.58, 13691330.69, 11258981.67, 10599613.93, 20890184.56, 6281750.11, 16564780.42, 11311762.29, 16533773.73, 8594844.21, 19145449.19, 6084137.84, 7568985.37, 17345751.98, 19735943.24, 1497983.15, 20386643.70.

  • Implement a function minIndex that takes an unsigned integer start as argument and returns an unsigned integer.

    • The function should traverse the array starting from the element indicated by start to the end of the array (50).
    • When you visit an element check if it is smaller than any of the elements visited so far. If so, remember the position of the element in a variable.
    • Return the value of the variable holding the position of the smallest element.
  • Provide a main function that calls the minIndex function (with varying values for start) and prints the returned positions. Verify that the output is correct.

  • What happens when you call minIndex with a start value that is larger than the array size? Try numbers to start from that are close to 50, but also larger numbers.

Sorting the Array

Once you have tested the minIndex function thoroughly, you can implement the actual sorting algorithm:

  • Implement a function sort that traverses the array from beginning to end:
    • Find the minimal element, starting at the position of the currently visited element.
    • Copy the value of the currently visited element into a temporary variable, with block scope.
    • Overwrite the value of the current element with the value of the minimal element.
    • Overwrite the value of the minimal element with the value stored in the temporary variable.
  • Modify the main function to sort the contents of the array data and print each element of the array on a separate line. The numbers should be printed in exponent notation (aka, scientific notation).
  • Make sure that output is correctly sorted.