最近的面试都开始问算法的知识了。而算法里最常问到的就是 快速排序的实现
这里说下我的理解,防止以后忘记,如果有错的地方希望各位能指出问题所在。
其实快速排序就是在数组中找一个数来当对比的对象,之后分两部分,一部分是从前到后一部分是
从后到前的方式去替换数组内的数,一直到当前划分出的数组内只有1个数的时候结束
这里说下我的理解,防止以后忘记,如果有错的地方希望各位能指出问题所在。
其实快速排序就是在数组中找一个数来当对比的对象,之后分两部分,一部分是从前到后一部分是
从后到前的方式去替换数组内的数,一直到当前划分出的数组内只有1个数的时候结束
private void QuickSort(List<int> arr, int left, int right)
{
if (left < right)
{
int index = (left + right)/2;//取中间的数的下角标
int key = arr[index]; //取中间的数,作为对照数
int i = left;
int j = right;
while (true)
{
while (arr[i] <= key && i != index) //一直循环直到碰到第一个小于对照数时跳出循环,并且判断是否是相同的数,防止死循环 (去除对照数,防止把对照数当做相同的数出现运算错误)
{
i++;
}
while (arr[j] > key)//同上,碰到第一个大于对照数跳出
{
j--;
}
if (i >= j)//如果前面的位置大于后面的证明数组循环一遍了,跳出循环
{
break;
}
swap(arr, i, j);
}
QuickSort(arr, left, i);
QuickSort(arr, i + 1, right);
}
}
private void swap(List<int> arr, int i, int j)
{
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}