先来看看快速排序的思想(图借鉴https://www.cnblogs.com/yundan/p/4022056.html)
1.首先选定一个基准数,我们以集合首元素作为基准数。
设定两个指针,i和j,指向首和尾元素
2.先从右往前遍历,找到从右边起第一个小于基准数的值,并把它放到i指向的地方
3.在从左遍历,找到从左边起第一个大于基准数的值,并把它放到j指向的地方
4.重复这两步骤,当i==j 的时候,退出循环,此时i==j 的位置正是基准数的位置。
5.对基准数前后两个部分,运用递归思想再次分别排序。
代码如下:
private void QuickSort(List<int> templist,int begin,int end)
{
if (begin>=end)
{
return;
}
int i = begin;
int j = end;
//将第一个元素作为基准
int standred = templist[begin];
//当i==j 的时候 找到了中间位(基准数的新位置)
while (i < j)
{
//从右往左,找到从右边起第一个小于基准数的值
while (i < j)
{
if (templist[j] <= standred)
{
templist[i] = templist[j];
break;
}
else
{
j--;
}
}
//从左往右,找到左边起第一个大于基准数的值
while (i < j)
{
if (templist[i] > standred)
{
templist[j] = templist[i];
break;
}
else
{
i++;
}
}
}
//此时跳出循环,证明i==j,基准数所在位置
templist[i] = standred;
//递归思想
QuickSort(templist, begin, i - 1);
QuickSort(templist, i + 1, end);
}
测试代码:
List<int> TempList = new List<int>();
private void Start()
{
TempList.Add(2);
TempList.Add(6);
TempList.Add(1);
TempList.Add(3);
TempList.Add(4);
for (int i = 0; i < TempList.Count; i++)
{
print("排序前:" + TempList[i]);
}
QuickSort(TempList, 0, TempList.Count - 1);
}
个人觉得这样比较好理解快速排序的思想。