# Sorting swift array

We can easily sort a swift array using two provided function

• `array.sort`
• `array.sorted`

We will see both array.sort() and array.sorted() in action and will understand how they differ from each other in a subtle way, while sorting a swift array in place and returning a sorted copy of the swift array.

## Example code for the playground for the swift array

The example code given below defines a student struct and creates an array of students which we will sort.

```struct Student {
var name:String
var age:Int
}

var students = [
Student(name: "A", age: 20),
Student(name: "B", age: 10),
Student(name: "C", age: 12),
Student(name: "D", age: 8),
Student(name: "E", age: 23),
Student(name: "F", age: 29),
Student(name: "G", age: 30),
Student(name: "H", age: 11)
]
```

As you can see the array contains students with their age in random order.

## Returning a sorted swift array

First, we will sort the `student` array and return its copy, without actually sorting the `students` array. We will use `array.sorted()`

```let arry = students.sorted {
return \$0.age < \$1.age
}```

No print the `array`

```arry.forEach{
print("\(\$0.name)======\(\$0.age)")
}
```

The output will be students sorted by their age.

```// student sorted by age
D======8
B======10
H======11
C======12
A======20
E======23
F======29
G======30```

But if we go and print the original `students` array. We will see that the order is still the same as at the time of creation. So `array.sorted()` has not actually sorted the `students` array but has returned a sorted copy

```students.forEach{
print("\(\$0.name)======\(\$0.age)")
}

//output
A======20
B======10
C======12
D======8
E======23
F======29
G======30
H======11```

## Sorting a swift array in place

This time we will sort the swift array in place which means the content of the original `students` array will be sorted. we will use `array.sort()` function.

```// sort students array
students.sort {
return \$0.age < \$1.age
}

print students array
students.forEach{
print("\(\$0.name)======\(\$0.age)")
}
```

Now this time the contents of `students` array has been sorted

```D======8
B======10
H======11
C======12
A======20
E======23
F======29
G======30```

Hope this helps !!!!

A pat on the back !!