属于内部排序 交换排序
原理,通过一趟扫描将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列
举个例子
如无序数组[6 2 4 1 5 9]
a. 先把第一项[6]取出来,
用[6]依次与其余项进行比较,
如果比[6]小就放[6]前边,2 4 1 5都比[6]小,所以全部放到[6]前边
如果比[6]大就放[6]后边,9比[6]大,放到[6]后边
一趟排完后变成下边这样:
排序前 6 2 4 1 5 9
排序后 2 4 1 5 6 9
b. 对前半[2 4 1 5]继续进行快速排序
重复步骤a后变成下边这样:
排序前 2 4 1 5
排序后 1 2 4 5
前半排序完成,总的排序也完成:
排序前:[6 2 4 1 5 9]
排序后:[1 2 4 5 6 9]
排序结束
代码
package com.tree;
public class Sort {
int[] numbers = new int[6];
int start ;
int end ;
public Sort(int[] numbers, int start, int end) {
super();
this.numbers = numbers;
this.start = start;
this.end = end;
}
public void say() {
for (int i = 0; i<numbers.length; i++) {
System.out.println(numbers[i]);
}
}
public void quickSort(int[] numbers, int start, int end) {
if (start < end) {
int base = numbers[start]; // 选定的基准值(第一个数值作为基准值)
int temp; // 记录临时中间值
int i = start, j = end;
do {
while ((numbers[i] < base) && (i < end))
i++;
while ((numbers[j] > base) && (j > start))
j--;
if (i <= j) {
temp = numbers[i];
numbers[i] = numbers[j];
numbers[j] = temp;
i++;
j--;
}
} while (i <= j);
if (start < j)
quickSort(numbers, start, j);
if (end > i)
quickSort(numbers, i, end);
}
}
}
//
package com.tree;
public class Quick {
public static void main(String[] args) {
// TODO 自动生成的方法存根
int[] b = {6,2,4,1,5,9};
Sort a = new Sort(b,0,5);
a.quickSort(b,0,5);
a.say();
}
}