#
##
###
```csharp
public void QuickSort(int[] nums)
{
//
QuickSort(nums, 0, nums.Length - 1);
}
//
private void QuickSort(int[] nums, int start, int end)
{
if (start < end)
{
// divide
int pivot = Partition(nums, start, end);
QuickSort(nums, 0, pivot - 1);
QuickSort(nums, pivot + 1, end);
}
}
//
private int Partition(int[] nums, int start, int end)
{
// pivot
int p = nums[end];
int i = start;
//
for (int j = start; j < end; j++)
{
if (nums[j] < p)
{
(nums[i], nums[j]) = (nums[j], nums[i]);
i++;
}
}
//
(nums[i], nums[end]) = (nums[end], nums[i]);
return i;
}
```
###
```csharp
public void MergeSort(int[] nums)
{
MergeSort(nums, 0, nums.Length);
}
private void MergeSort(int[] nums, int start, int end)
{
if (end - start VS

[](https://www.bilibili.com/video/av18980178/)

```csharp
public void HeapSort(int[] nums)
{
// 1nums
// 2nums
for (int i = nums.Length / 2 - 1; i >= 0; i--)
{
Sink(nums, i, nums.Length);
}
// 3nums[0]nums[len(a)-1]
// 4
for (int i = nums.Length - 1; i >= 0; i--)
{
//
(nums[0], nums[i]) = (nums[i], nums[0]);
//
Sink(nums, 0, i);
}
}
private void Sink(int[] nums, int i, int length)
{
while (true)
{
// (0i*2+1)
int l = i * 2 + 1;
//
int r = i * 2 + 2;
//
int index = i;
//
if (l < length && nums[l] > nums[index])
{
index = l;
}
//
if (r < length && nums[r] > nums[index])
{
index = r;
}
//
if (index == i)
{
break;
}
//
(nums[i], nums[index]) = (nums[index], nums[i]);
i = index;
}
}
```
##
[](https://www.cnblogs.com/onepixel/p/7674659.html)
[](https://labuladong.gitbook.io/algo/shu-ju-jie-gou-xi-lie/er-cha-dui-xiang-jie-shi-xian-you-xian-ji-dui-lie)
##
- [ ]