# C# Quick Sort Algorithm Implementation

Quicksort algorithm is a sorting algorithm developed by Tony Hoare that, on average, makes O(n log n) comparisons to sort n items.

For more information about Quick Sort Algorithm:

http://en.wikipedia.org/wiki/Quicksort

**Implementation and Usage:**

int[] arr = new int[10] { 1, 5, 4, 11, 20, 8, 2, 98, 90, 16 }; QuickSort(arr, 0, arr.Length - 1); Console.WriteLine("Sorted Values:"); for (int i = 0; i < arr.Length; i++) Console.WriteLine(arr[i]); //Output: //Sorted Values: //1 //2 //4 //5 //8 //11 //16 //20 //90 //98

private void QuickSort(int[] arr, int start, int end) { int i; if (start < end) { i = Partition(arr, start, end); QuickSort(arr, start, i - 1); QuickSort(arr, i + 1, end); } } private int Partition(int[] arr, int start, int end) { int temp; int p = arr[end]; int i = start - 1; for (int j = start; j <= end - 1; j++) { if (arr[j] <= p) { i++; temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } } temp = arr[i + 1]; arr[i + 1] = arr[end]; arr[end] = temp; return i + 1; }

**See Also:**

Isn’t it default Call by Value in C#? so how does the array have the right values in the end?

Arrays in .NET are object on the heap, so you have a reference. That reference is passed by value, meaning that changes to the contents of the array will be seen by the caller, but reassigning the array won’t: