快速排序算法写法很多种,这里介绍一种简单的:
//递归方式实现快速排序
//算法思想每次排序会把小于锚点的数放在左边,大于锚点的数放在右边,
//排完一轮就找到了锚点的正确位置,然后递归对锚点左侧,和右侧的数组
//进行相同的规则排序
public static void quicksort(int[] array, int start, int end) {
int leftPos = start;
int rightPos = end;
//取最后一个数作为锚点
int data = array[end];
//一次排序的运行条件
while (leftPos < rightPos) {
//从右侧开始,因为要从大到小排序,所以应该是右侧大于锚点的数是符合规则的,指针一直向左侧移动
while (leftPos < rightPos && array[rightPos] > data) {
rightPos--;
}
if (array[leftPos] > data) {
int temp = array[leftPos];
array[leftPos] = array[rightPos];
array[rightPos] = temp;
}
while (leftPos < rightPos && array[leftPos] < data) {
leftPos++;
}
if (array[rightPos] < data) {
int temp = array[leftPos];
array[leftPos] = array[rightPos];
array[rightPos] = temp;
}
}
if (leftPos > start) {
quicksort(array, start, leftPos - 1);
}
if (rightPos < end) {
quicksort(array, rightPos + 1, end);
}
}
public static void main(String[] args) {
int[] array = { 9, 1, 3, 7, 2, 4, 6, 110, 22, 5 };
// sort1(array);
// sort2(array);
// sort3(array);
quicksort(array, 0, array.length - 1);
for (int i = 0; i < array.length; i++) {
System.out.println(array[i]);
}
}
1
2
3
4
5
6
7
9
22
110