快速排序
定义:快速排序的思想非常简单,在待排序的数列中,我们首先要找一个数字作为基准数)。为了方便,我们一般选择第 1 个数字作为基准数。接下来我们需要把这个待排序的数列中小于基准数的元素移动到待排序的数列的左边,把大于基准数的元素移动到待排序的数列的右边。这时,左右两个分区的元素就相对有序了;接着把两个分区的元素分别按照上面两种方法继续对每个分区找出基准数,然后移动,直到各个分区只有一个数时为止。
此时交换 5和7 的位置 。
之后就采用递归的思想(方法中调用方法)
代码:
package xq0810;
public class QuickSort {
public static void main(String[] args) {
int [] array= {1,2,5,10,4,6,8,9,7,3};
quickSort(array,0,array.length -1);
System.out.println("从小到大排序后的结果是:");
for(int i=0;i<array.length;i++) {
System.out.print(array[i]+" ");
}
}
public static void quickSort(int []array,int left,int right) {
if(left>right) { //先进行判断,如果左边索引比右边索引大,是不合法的
return;
}
int base=array[left]; //定义基准数
int i=left; //定义变量i,指向最左边
int j=right; //定义变量j,指向最右边
while(i!=j) { //当i不等于j时,再循环中进行索引
while(array[j]>=base && i < j) { //如果j从右边检索到比基准数小,就要停下
j--;
}
while(array[i]<=base && i < j) { //如果i从左边检索到比基准数大,就要停下
i++;
}
int temp=array[i]; //交换i和j位置的元素
array[i]=array[j];
array[j]=temp;
}
array[left]=array[i]; //如果上边的循环没成立,说明i和j在同一个元素上,此时交换基准和这个相遇的元素
array[i]=base; //此时基准数左边的数都比他小,右边的数都比他大
quickSort(array,left,i-1); //重新索引基准数左边的
quickSort(array,j+1,right); //重新索引基准数右边的
}
}
但是快速排序是一个不稳定的排序算法。