基本思想:
通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
排序步骤:
(1)设置两个变量i、j,排序开始的时候:i=0, j=N-1
(2)以第一个数组元素作为关键数据,赋值给key,即key=A[0];
(3)从j开始向前搜索,即由后开始向前搜索(j–),找到第一个小于key的值A[j]
(4)从i开始向后搜索,即由前开始向后搜索(i++),找到第一个大于key的值A[i]
(5)交换两个索引对应的值即A[i]与A[i]交换
(6)重复第3~5步,直到i=j,将关键数据归位
代码:
交换数组中两个数的静态函数:
public static void Swap(int[] arr, int i, int j)
{
int tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
快速排序方法主体:
public static void quickSort(int[] a, int left, int right)
{
int i, j, key;
if (left > right)
{
return;
}
key = a[left];
i = left;
j = right;
while (i != j)
{
while (a[j] >= key && i < j)
{
j--;
}
while (a[i] <= key && i < j)
{
i++;
}
Swap(a, i, j);
}
a[left] = a[i];
a[i] = key;
quickSort(a, left, i - 1);
quickSort(a, i + 1, right);
}