2.3 快速排序
简介:应用最广泛的排序算法,实现简单、使用于各种不同的输入数据
在一般应用中比其他算法要快
特点:原地排序(只需要一个很小的辅助栈),时间复杂度NlgN
public class QuickSort {
/**
* a--待排序的数组
* l--数组的左边界
* r--数组的右边界
*/
public static void quick_sort(int[] a, int l, int r) {
if (l < r) { // 递归的边界
// 双指针标记
int i = l;
int j = r;
int x = a[i];
while (i < j) {
while (i < j && a[j] > x) // 从右向左找到第一个小于x的数
j--;
if (i < j)
a[i++] = a[j]; // 找到了交换
while (i < j && a[i] < x) //从左向右找到第一个大于x的数
i++;
if(i<j)
a[j--]=a[i];
}
a[i]=x;
quick_sort(a, l, i-1); //递归调用左半部分
quick_sort(a, i+1, r); //递归调用右半部分
}
}
public static void main(String[] args) {
int[] arr= {5,6,9,8,7,2,10,56,21,64,11};
quick_sort(arr,0,arr.length-1);
for (int i : arr) {
System.out.print(i+" ");
}
}
}