快速排序算法思想:
一趟快速排序的算法是:
最通俗的讲法:
取第一个数跟数组中的其他数比较,小的在左边大的在右边,就这样一直递归排序
排序的基本过程
初始化关键字: [49,38,65,97,76,13,27,49]
代码实现:
public static void main(String[] args) {
// TODO Auto-generated method stub
int a[] = {49, 38, 65, 97, 76, 13, 27, 49};//设置一个数组
sort(a,0,a.length-1); //调用快速排序方法
System.out.println(Arrays.toString(a)); //将快速排序过的数组输出
}
public static void sort(int a[], int left, int right) {
int i, j, key;
if (left > right) { //这个判断很重要的,有这个才会在函数递归的时候跳出
return;
}
i = left; //左边第一位开始
j = right; //右边最后一位
key = a[i]; //用数组的第一位数做为参考数
while (i < j) { // 从数组的两端交替向中间扫描
while (i < j && a[j] >= key){ //从右边开始扫描
j--;
}
//跳出循环说明右边这个点的数有比参考数小,所以两个数互换位子,小的到左边
a[i] = a[j];
while (i<j && a[i]< key){ //再从左边扫描
i++;
}
//跟上面同理,只是相反
a[j] = a[i];
}
a[i] = key; //这是循环到最后的时候 a[j] = a[i];产生重复,i的位置的数应该是key,所以替换回来
sort(a, left, i - 1); // 对小于key一边的递归排序
sort(a, i + 1, right); // 对高于key一边的递归排序
//直到两边排序完毕,在以上中的if判断中跳出这个方法成功快速排序
}