Skip to main content

Scala language implementation of Selection Sort


Introduction

Selection sort is the simplest sorting algorithm in terms of implementation.
Let's consider we have a list of elements i.e. {3, 9, 0, 5, 4 }

a) Selection sort maintains two sublists, one sorted and initially empty and second unsorted sublist i.e.
[ {}, {3, 9 , 0, 5 ,4 }]

b) It searches for the minimum element (for ascending sort) OR for a maximum element( for descending sort) in the unsorted list in each step.

Step 1

[ {0 }, {9,3,5,4}]
Minimum element = 0 , swapped with 3

Step 2

Minimum element = 3 , swapped with 9
[{0,3) , {9,5,4} ]

Step 3

Minimum element = 4 , swapped with 9
[{0,3,4} , {5,9}]

Step 4

Minimum element = 5 , swapped with itself
[{0,3,4,5}, {9}]

Step 5

Minimum element = 9 , swapped with itself
[{0,3,4,5,9}, {}]

Worst Complexity: O(n*n)

Best Complexity   : O(n * n)


Implementation



package main.scala

object SelectionSort {

  val array = Array(0, 5, 2, 6, 3, 1)

  def main(args: Array[String]) {
    print("Unsorted List ")
    println(array.toList)
    print("Asceding sorted List ")
    sortAscending;
    println(array.toList)

    sortDescending
    print("Desceding sorted List ")
    println(array.toList)
  }

  def sortAscending {
    for (outer <- 0 until array.length) {
      var minimumIndex = outer;
      for (inner <- outer + 1 until array.length) {
        if (array.apply(minimumIndex) > array.apply(inner)) {
          minimumIndex = inner
        }
      }
      swap(minimumIndex, outer)
    }
  }

  def sortDescending {
    for (outer <- 0 until array.length) {
      var maximumIndex = outer;
      for (inner <- outer + 1 until array.length) {
        if (array.apply(maximumIndex) < array.apply(inner)) {
          maximumIndex = inner
        }
      }
      swap(maximumIndex, outer)
    }
  }

  def swap(minimumIndex: Int, swapIndex: Int) {
    var temp = array.apply(minimumIndex)
    array.update(minimumIndex, array.apply(swapIndex))
    array.update(swapIndex, temp)
  }
}

Input   : 3,9, 0, 5 ,4
Output: 0 3 4 5 9 (Ascending)
Output: 9 5 4 3 0 (Descending)

Conclusion

In this tutorial, we learned how to implement Selection Sort using Scala language. Please leave your comments in the comment box. Happy learning :)

Comments

Popular posts from this blog

Eclipse - Server Tomcat v8.5 Server at localhost failed to start.

When I try to launch the tomcat from Eclipse, I encountered the following error Server Tomcat v8.5 Server at localhost failed to start. Solution Step 1  Delete the .snap file located at the following location     eclipse workspace Path\ .metadata\.plugins\org.eclipse.core.resources Step 2 Delete the  tmp0  folder from the following path      eclipse workspace Path \.metadata\.plugins\org.eclipse.wst.server.core Step 3  Delete the server from servers list Step 4  Remove already added Tomcat Server      i)  Click on Define a new Server     ii)  Select Server Runtime Environments     iii) Select the Tomcat Server and remove it as follows Remove Selected Server Step 5 Make sure that correct version of Server is configured in Project Properties Step 6 Restart the Eclipse IDE.

hibernate-release-5.4.4.Final - Required Jars

Introduction Hibernate (Object Relational Mapping framework) is an implementation of Java Persistence API (JPA) specification.   Required Jars for Hibernate 5.4.4 Following Jars resided inside the required folder are the mandatory jars required for Hibernate 5.4.4 antlr-2.7.7.jar byte-buddy-1.9.11.jar classmate-1.3.4.jar dom4j-2.1.1.jar FastInfoset-1.2.15.jar hibernate-commons-annotations-5.1.0.Final.jar hibernate-core-5.4.4.Final.jar istack-commons-runtime-3.0.7.jar jandex-2.0.5.Final.jar javassist-3.24.0-GA.jar javax.activation-api-1.2.0.jar javax.persistence-api-2.2.jar jaxb-api-2.3.1.jar jaxb-runtime-2.3.1.jar jboss-logging-3.3.2.Final.jar jboss-transaction-api_1.2_spec-1.1.1.Final.jar stax-ex-1.8.jar txw2-2.3.1.jar Hibernate 5.4.4 release is compatible with  Java 8 or 11  JPA 2.2 References https://hibernate.org/orm/releases/5.4/

spark-submit java.lang.NoClassDefFoundError: scala/runtime/java8/JFunction1$mcII$sp

Exception  Exception in thread "main" java.lang.BootstrapMethodError: java.lang.NoClassDefFoundError: scala/runtime/java8/JFunction1$mcII$sp         at SparkPi$.main(SparkPi.scala:14)         at SparkPi.main(SparkPi.scala)         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)         at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) Problem: It seems that you have compiled and generated your jar file with an upper version of the Scala compiler than the one spark is using. Solution Step 1 Run the following command from spark-installed-directory\bin spark-shell.cmd (or.sh) and note the Scala version, My Spark version was 2.4.3 and Scala version 2.11.12 Step 2 Change the scala version into your build.sbt to 2.11.12 (per your configuration). My build.sbt is name := "SparkPi Project" version := "1.0" scalaVersion := "...