aliadiere
aliadiere

Reputation: 65

Arranging values of array in Ascending order

I couldn't get it to work, I am trying to arrange the values of the array in ascending order by using for loop.

        int[] arr = new int[5] { 5, 6, 2, 4, 1 };

        for (int i = 0; i <= arr.Length; i++)
        {
            if (arr[i] > arr[i + 1])
            {
                int temp = arr[i + 1];
                arr[i] = arr[i + 1];
                arr[i] = temp;
            }

            Console.Write(arr[i]);
        }

Upvotes: 3

Views: 62691

Answers (11)

imtiyaz
imtiyaz

Reputation: 41

int[] Array = { 11, 33, 5, -3, 19, 8, 49 };

int temp;

for (int i = 0; i < Array.Length - 1; i++)
{

    for (int j = i + 1; j < Array.Length; j++)
    {
        if (Array[i] > Array[j])
        {

            temp = Array[i];
            Array[i] = Array[j];
            Array[j] = temp;

        }

    }

}

Console.Write("Sorted:");

foreach (int sort in Array)
    Console.Write("{0} ", sort);

Upvotes: 4

user3899906
user3899906

Reputation: 23

   public int[] sortArray(params int[] numbers)

    {
        for(int i = 0; i < numbers.Length; i++)
        {
            for(int j = i + 1; j < numbers.Length; j++)
            {
                if (numbers[i] < numbers[j])
                {
                    continue;
                }else if (numbers[i] > numbers[j])
                {
                    int temp = numbers[i];
                    numbers[i] = numbers[j];
                    numbers[j] = temp;
                }


            }
        }

        return numbers;
    }

Upvotes: 0

Stephan Regan
Stephan Regan

Reputation: 41

    int temp = 0;
    int[] arr = new int[] { 5, 6, 2, 4, 1 };
    for (int i = 0; i <= arr.Length - 1; i++)
    {
        for (int j = i + 1; j <= arr.Length - 1; j++)
        {
            if (arr[i] > arr[j])     //> Asecnding Order < Desending Order
            {
                temp = arr[i];
                arr[i] = arr[j];
                arr[j] = temp;
            }
        }
        Console.Write(arr[i]);
    }
    Console.ReadLine();

Upvotes: 0

Gurung
Gurung

Reputation: 163

        int[] array = new int[] { 8, 9, 5, 6, 7, 4, 3, 2, 1 };
        int[] outPut = new int[] { };
        int temp = 0;
        for (int i = 0; i < array.Length; i++)
        {
            for (int j = 0; j < array.Length; j++)
            {
                var first = array[i];
                var second = array[j];
                if (array[i] < array[j]) {
                    temp = first;
                    array[i] = second;
                    array[j] = temp;
                }
            }
        }
        foreach (var item in array) {
            Console.WriteLine(item);
        }
        Console.ReadKey();
        }
        foreach (var item in array) {
            Console.WriteLine(item);
        }
        Console.ReadKey();

Upvotes: 0

Siva Ragu
Siva Ragu

Reputation: 17

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace basicsorting
{
    public class Program
    {
        public static void Main(string[] args)
        {
            int i2, k, j;

            Console.WriteLine("How many elements you want to sort? ");

            i2 = Convert.ToInt32(Console.ReadLine());
            int[] values = new int[i2];
            int n1 = 0;
            int n = 0; ;
            int i;
            Console.WriteLine("Enter the elements of array {0}", n1);
            for (i = 0; i < i2; i++)
            {
                Console.WriteLine("Enter the elements of array {0}");
                n = Convert.ToInt32(Console.ReadLine());
                Convert.ToInt32(values[i] = n);
            }

            for (i = 0; i < i2; i++)
            {
                k = Convert.ToInt32(values[i]);
                for (j = i - 1; j >= 0 && k < values[j]; j--)
                    values[j + 1] = values[j];
                values[j + 1] = k;
            }

            for (i = 0; i < i2; i++)
            {
                Console.WriteLine("sorting elements {0}", values[i]);
            }
            Console.ReadLine();
        }

    }
}

Upvotes: 0

Mohammad Saif
Mohammad Saif

Reputation: 1

using System;
namespace bubble_sort
{
    class Program
    {
        static void Main(string[] args)
        {
            Program p = new Program();
            int[] arr = new int[50]; 
            int n;
            Console.WriteLine("Enter no of elements you want to store in an array");
            n = Convert.ToInt32(Console.ReadLine()); 
            Console.WriteLine("Enter elements in an array");
            for (int i = 1; i <= n; i++)
            {
                arr[i] = Convert.ToInt32(Console.ReadLine());
            }
            p.bubblesort(arr, n);
            Console.ReadKey();
        }
        public void bubblesort(int[] arr, int n)
        {
            int temp;
            for (int i = 1; i <= n; i++)
            {
                for (int j = 1; j <= n - i; j++)
                {
                    if (arr[j] > arr[j + 1])
                    {
                        temp = arr[j];
                        arr[j] = arr[j + 1];
                        arr[j + 1] = temp;
                    }
                }
            }
            Console.WriteLine("Array after sorting");
            for (int i = 1; i <= n; i++)
            {
                Console.WriteLine(arr[i]);
            }
        }
    }
}

Upvotes: 0

Sergey Kalinichenko
Sergey Kalinichenko

Reputation: 726509

I am assuming that you are not using Array.Sort because you are doing this as a learning exercise; there is no other way to avoid this very common library function.

The reason your algorithm does not work is that it is not enough to go through an array once, and swap items that are out of order. Try doing this as a mental experiment, when the array is almost sorted, but the first element is at the end, like this:

2 3 4 5 6 7 1

A single path would bring you closer, but it wouldn't bring you all the way to a sorted array:

2 3 4 5 6 1 7

As you can see, you have to repeat this process multiple times, until the array is sorted. How do you know that the array is sorted? You know that when the entire inner loop did not have a single swap.

Here is how you can implement this:

bool didSwap;
do {
    didSwap = false;
    for (int i = 0; i < arr.Length-1; i++)
    {
        if (arr[i] > arr[i + 1])
        {
            int temp = arr[i + 1];
            arr[i + 1] = arr[i];
            arr[i] = temp;
            didSwap = true;
        }
    }
} while (didSwap);
for (int i = 0; i != arr.Length ; i++) {
    Console.Write(arr[i]);
}

Note several changes from your code:

  • The printing is done in the separate loop, after the sorting is complete
  • The loop goes to arr.length-1, not to arr.length, because otherwise your last check will go outside the bounds of the array.
  • This sorting algorithm is called Bubble Sort. There are various optimizations to this algorithm that can make it go slightly faster.
  • In general, bubble sort is among the slower sorting algorithms. When the number of items to sort is high, you should consider an advanced algorithm, or use the library implementation.

Upvotes: 5

Anoop Sharma
Anoop Sharma

Reputation: 193

You should do like :

int[] arr = new int[5] { 5, 6, 2, 4, 1 };

        for (int i = 0; i < arr.Length-1; i++)
        {
            if (arr[i] < arr[i + 1])
            {
                int temp = arr[i];
                arr[i] = arr[i + 1];
                arr[i + 1] = temp;
            }



        }

// to verify sorted Array

for (int i = 0; i < arr.Length; i++) { console.write( arr[i].ToString()); }

For last 1 you need not to check it will be automatically ordered.

Upvotes: -1

RajeshKannan
RajeshKannan

Reputation: 904

Use Linq Order by:

int[] arr = new int[5] { 5, 6, 2, 4, 1 };

int[] ascOrderedArray = (from i in arr orderby i ascending select i).ToArray();

I think it could be easy and why do you need for loop.

Upvotes: 0

Guffa
Guffa

Reputation: 700252

If you want to make your own sorting, then it's not enough to just loop through the items once and swap them. The closest to that is the bubble sort algorithm, where you loop over the array repeatedly until there is no more items to swap:

int[] arr = new int[5] { 5, 6, 2, 4, 1 };

bool swapped = true;
while (swapped) {
  swapped = false;
  for (int i = 0; i < arr.Length - 1; i++) {
    if (arr[i] > arr[i + 1]) {
      swapped = true;
      int temp = arr[i + 1];
      arr[i] = arr[i + 1];
      arr[i] = temp;
   }
  }
}
for (int i = 0; i < arr.Length - 1; i++) {
  Console.Write(arr[i]);
}

There are also built in methods to sort data, which is easier to use, more efficient, and already thoroughly tested:

int[] arr = new int[5] { 5, 6, 2, 4, 1 };
Array.Sort(arr);

Upvotes: 1

Agent Shark
Agent Shark

Reputation: 525

@Jon Skeet They wanted to use a for loop.

There are numerous types of sorts. The simplest is Bubble Sort.

int[] arr = new int[5] { 5, 6, 2, 4, 1 };

//bubble sort
for (int i = arr.Length - 1; i > 0; i--)
{
    for (int j = 0; j <= i - 1; j++)
    {
        if (arr[j] > arr[j + 1])
        {
            int highValue = arr[j];

            arr[j] = arr[j + 1];
            arr[j + 1] = highValue;
        }
    }
}

foreach(int i in arr) Console.Write(i);

Upvotes: -2

Related Questions