版权声明:如需转载,请附上原文链接即可 https://blog.csdn.net/doujinlong1/article/details/85261574
快排算法的Java实现
快排的核心是找到在无序数组中找到一个数,然后将比他小的数字放在他的左边,比他大的数字放在他的右边。然后递归的对左右两边进行继续排序,直到完成,下面看算法的实现:
public static void sort(int a[], int start, int end) {
if (start >= end) {
return;
}
//获取到已经排好序的数字,左边数字都比他小,右边都比他大。
int flag = getFlag(a, start, end);
sort(a, start, flag - 1);
sort(a, flag + 1, end);
}
private static int getFlag(int[] a, int start, int end) {
int begin = start;
int over = end;
//选取第一个为目标数字。
int num = a[start];
int flag = start;
while (begin < over) {
//从左找到第一个比目标数字大的。
while (begin < end && a[begin] <= num){begin++;}
//从右找到第一个比目标数字小的。
while (over > start&& a[over] >= num){over--;}
//如果begin小于end且值大于,则交互两个数字。
if(begin < over&&a[begin] > a[over]) swap(a, begin, over);
}
//交换目标数字与上面循环完的数字的位置。
swap(a, over, flag);
return over;
}
private static void swap(int[] a, int begin, int end) {
int temp = a[begin];
a[begin] = a[end];
a[end] = temp;
}