Open In App

Stable sort for descending order

Improve
Improve
Like Article
Like
Save
Share
Report

Given an array of n integers, we have to reverse sort the array elements such the equal keys are stable after sorting. 
Examples: 
 

Input : arr[] = {4, 2, 3, 2, 4}
Output : 4, 4, 3, 2, 2

 

Prerequisite : Stability in sorting algorithms
Method 1 (Writing our own sorting function : Bubble Sort)
We know sorting algorithms like Bubble Sort, Insertion Sort, Merge Sort, Count Sort are stable. We implement here Bubble Sort.
Explanation 
First Pass 
(4′, 2′, 3, 2″, 4″) -> (2′, 4′, 3, 4″, 2″) Here algorithm compares last two element and 
swaps since 2″ < 4″. 
(2′, 4′, 3, 4″, 2″) -> (2′, 4′, 4″, 3, 2″) swap since 3 < 4″ 
(2′, 4′, 4″, 3, 2″) -> (2′, 4′, 4″, 3, 2″) 
(2′, 4′, 4″, 3, 2″) -> (4′, 2′, 4″, 3, 2″) swap since 2′ < 4′.
Second Pass: 
(4′, 2′, 4″, 3, 2″) -> (4′, 2′, 4″, 3, 2″) 
(4′, 2′, 4″, 3, 2″) -> (4′, 2′, 4″, 3, 2″) 
(4′, 2′, 4″, 3, 2″) -> (4′, 4″, 2′, 3, 2″) swap since 2′ (4′, 4″, 2′, 3, 2″)
Third Pass: 
(4′, 4″, 2′, 3, 2″) -> (4′, 4″, 2′, 3, 2″) 
(4′, 4″, 2′, 3, 2″) -> (4′, 4″, 3, 2′, 2″) swap since 2′<3 
Now, the array is in sorted order and same elements are in same order as they were in the original array.
 

C++




// Bubble sort implementation to sort
// elements in descending order.
#include <iostream>
#include <vector>
using namespace std;
 
void print(vector<int> a, int n)
{
    for (int i = 0; i <= n; i++)
        cout << a[i] << " ";   
    cout << endl;
}
 
// Sorts a[] in descending order using
// bubble sort.
void sort(vector<int> a, int n)
{
    for (int i = n; i >= 0; i--)
        for (int j = n; j > n - i; j--)
            if (a[j] > a[j - 1])
                swap(a[j], a[j-1]);
    print(a, n);
}
 
// Driver code
int main()
{
    int n = 7;
    vector<int> a;
    a.push_back(2);
    a.push_back(4);
    a.push_back(3);
    a.push_back(2);
    a.push_back(4);
    a.push_back(5);
    a.push_back(3);
    sort(a, n - 1);
    return 0;
}


Java




// Bubble sort implementation
// to sort elements in
// descending order.
import java.io.*;
import java.util.*;
 
class GFG
{
static void print(ArrayList<Integer> a,
                                 int n)
{
    for (int i = 0; i <= n; i++)
        System.out.print(a.get(i) + " ");
    System.out.println();
}
 
// Sorts a[] in descending
// order using bubble sort.
static void sort(ArrayList<Integer> a,
                                  int n)
{
    for (int i = n;
            i >= 0; i--)
        for (int j = n;
                j > n - i; j--)
            if (a.get(j) > a.get(j - 1))
            {
                int tempswap = a.get(j);
                a.remove(j);
                a.add(j, a.get(j - 1));
                a.remove(j - 1);
                a.add(j - 1, tempswap);
            }
    print(a, n);
}
 
// Driver code
public static void main(String[] args)
{
    int n = 6;
    ArrayList<Integer> a = new ArrayList<Integer>();
    a.add(2);
    a.add(4);
    a.add(3);
    a.add(2);
    a.add(4);
    a.add(5);
    a.add(3);
    sort(a, n);
}
}
 
// This code is contributed by
// Manish Shaw(manishshaw1)


Python3




# Bubble sort implementation to sort
# elements in descending order.
 
def print1(a, n):
 
    for i in range(0,n+1):
        print(a[i],end=" ")
    print("")
 
 
# Sorts a[] in descending order using
# bubble sort.
def sort(a, n):
 
    for i in range(n,0,-1):
        for j in range(n, n - i,-1):
            if (a[j] > a[j - 1]):
                a[j], a[j-1]=a[j-1], a[j]
    print1(a,n)
 
 
# Driver code
n = 7
a = [2,4,3,2,4,5,3]
 
sort(a, n-1)
 
# This code is contributed
# by Smitha Dinesh Semwal


C#




// Bubble sort implementation
// to sort elements in
// descending order.
using System;
using System.Collections.Generic;
 
class GFG
{
static void print(List<int> a,
                       int n)
{
    for (int i = 0; i <= n; i++)
        Console.Write(a[i] + " ");
    Console.WriteLine();
}
 
// Sorts a[] in descending
// order using bubble sort.
static void sort(List<int> a,
                      int n)
{
    for (int i = n;
             i >= 0; i--)
        for (int j = n;
                 j > n - i; j--)
            if (a[j] > a[j - 1])
            {
                int tempswap = a[j];
                a[j] = a[j - 1];
                a[j - 1] = tempswap;
            }
    print(a, n);
}
 
// Driver code
static void Main()
{
    int n = 6;
    List<int> a = new List<int>();
    a.Add(2);
    a.Add(4);
    a.Add(3);
    a.Add(2);
    a.Add(4);
    a.Add(5);
    a.Add(3);
    sort(a, n);
}
}
 
// This code is contributed by
// Manish Shaw(manishshaw1)


PHP




<?php
// Bubble sort implementation
// to sort elements in
// descending order.
 
function swap(&$x, &$y)
{
    $x ^= $y ^= $x ^= $y;
}
 
function print1($a, $n)
{
    for ($i = 0; $i <= $n; $i++)
        echo ($a[$i] . " ");
    echo ("\n");
}
 
// Sorts a[] in descending
// order using bubble sort.
function sort1($a, $n)
{
    for ($i = $n;
         $i >= 0; $i--)
    {
        for ($j = $n;
             $j > $n - $i; $j--)
        {
            if ($a[$j] > $a[$j - 1])
                swap($a[$j],
                     $a[$j - 1]);
        }
    }
    print1($a, $n);
}
 
// Driver code
$n = 6;
$a = array();
array_push($a, 2);
array_push($a, 4);
array_push($a, 3);
array_push($a, 2);
array_push($a, 4);
array_push($a, 5);
array_push($a, 3);
sort1($a, $n);
 
// This code is contributed by
// Manish Shaw(manishshaw1)
?>


Javascript




<script>
 
// Bubble sort implementation
// to sort elements in
// descending order.
     
function print(a,n)
{
       for (let i = 0; i <= n; i++)
        document.write(a[i] + " ");
    document.write("<br>");
}
 
// Sorts a[] in descending
// order using bubble sort.
function sort(a,n)
{   
    for (let i = n;
            i >= 0; i--)
        for (let j = n;
                j > n - i; j--)
            if (a[j] > a[j-1]){
                let tempswap = a[j];
                a[j] = a[j - 1];
                a[j - 1] = tempswap;
            }
    print(a, n);
     
}
 
// Driver code
let n = 6;
let a=[];
a.push(2);
a.push(4);
a.push(3);
a.push(2);
a.push(4);
a.push(5);
a.push(3);
sort(a, n);
         
    // This code is contributed by avanitrachhadiya2155
     
</script>


Output:  

5 4 4 3 3 2 2

Time Complexity: O(n*n)
Auxiliary Space: O(1)

Method 2 (Using library function) 
We can use stable_sort to sort elements in stable manner.
 

C++




// C++ program to demonstrate descending order
// stable sort using greater<>().
#include <bits/stdc++.h>
using namespace std;
 
int main()
{
    int arr[] = { 1, 5, 8, 9, 6, 7, 3, 4, 2, 0 };
    int n = sizeof(arr) / sizeof(arr[0]);
 
    stable_sort(arr, arr + n, greater<int>());
 
    cout << "Array after sorting : \n";
    for (int i = 0; i < n; ++i)
        cout << arr[i] << " ";
 
    return 0;
}


Java




import java.util.*;
 
class GFG
{
    static void reverse(int a[])
    {
        int i, k, n = a.length;
        int t;
        for (i = 0; i < n / 2; i++)
        {
            t = a[i];
            a[i] = a[n - i - 1];
            a[n - i - 1] = t;
        }
    }
     
    // Driver code
    public static void main(String[] args)
    {
        int arr[] = {1, 5, 8, 9, 6, 7, 3, 4, 2, 0};
        int n = arr.length;
 
        Arrays.sort(arr);
        reverse(arr);
 
        System.out.println("Array after sorting : \n");
        for (int i = 0; i < n; ++i)
        {
            System.out.print(arr[i] + " ");
        }
    }
}
 
// This code has been contributed by 29AjayKumar


Python 3




# Python 3 program to demonstrate
# descending order
 
if __name__ == "__main__":
     
    arr = [ 1, 5, 8, 9, 6,
            7, 3, 4, 2, 0 ]
    n = len(arr)
 
    arr.sort(reverse = True)
 
    print("Array after sorting : ")
    for i in range(n):
        print(arr[i], end = " ")
 
# This code is contributed by ita_c


C#




// C# program to demonstrate descending order
using System;
     
class GFG
{
    static void reverse(int []a)
    {
        int i, k, n = a.Length;
        int t;
        for (i = 0; i < n / 2; i++)
        {
            t = a[i];
            a[i] = a[n - i - 1];
            a[n - i - 1] = t;
        }
    }
     
    // Driver code
    public static void Main(String[] args)
    {
        int []arr = {1, 5, 8, 9, 6, 7, 3, 4, 2, 0};
        int n = arr.Length;
 
        Array.Sort(arr);
        reverse(arr);
 
        Console.WriteLine("Array after sorting : \n");
        for (int i = 0; i < n; ++i)
        {
            Console.Write(arr[i] + " ");
        }
    }
}
 
// This code is contributed by 29AjayKumar


Javascript




<script>
// javascript program to demonstrate descending order
 
    function reverse(a)
    {
        var i, k, n = a.length;
        var t;
        for (i = 0; i < n / 2; i++)
        {
            t = a[i];
            a[i] = a[n - i - 1];
            a[n - i - 1] = t;
        }
    }
       
    // Driver code
 
        var arr = [ 1, 5, 8, 9, 6, 7, 3, 4, 2, 0 ] ;
        var n = arr.length;
   
        arr.sort();
        reverse(arr);
   
        document.write("Array after sorting : " + "<br>");
        for (var i = 0; i < n; ++i)
        {
            document.write(arr[i] + " ");
        }
         
        // This code is contributed by bunnyram19.
        </script>


Output:  

Array after sorting : 
9 8 7 6 5 4 3 2 1 0 

 Time Complexity: O(n logn)
Auxiliary Space: O(1)



Last Updated : 22 Mar, 2023
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads