快速排序:
对冒泡排序法改进,
基本思想:通过对一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据
都比另外一部分的所有数据都要小,然后在按照此方法对这两部分数据进行快速排序
整个排序过程可以递归进行,最后整个数据变成有序数列
package 内部排序.交换排序.快速;
import java.util.Arrays;
public class QuickSort {
public static void main(String[] args) {
int arr[]={6,-8,43,3,9,-1,45};
sortQuick(arr, 0, arr.length-1);
System.out.println(Arrays.toString(arr));
}
public static void sortQuick(int[] in, int left, int right){
int key = in[left]; //选定数组第一个数字作为基准值key
int start = left;
int end = right;
//该while循环目的是将小于key值的数放其左边,大于放其右边,最终得到
//key的位置,然后在以此位置递归排序,得到有序序列
while(start<end){
//先从右向左遍历,找到小于key的值,然后把这个值赋给arr[start]。
while(start < end && key<=in[end]){
end--;
}
in[start] = in[end];
//在从左向右遍历,找到大于key的,然后把这个值赋给arr[end]。
while(start < end && key > in[start]){
start++;
}
in[end] = in[start];
}
//此时start==end,这就是所谓的轴,把key放入轴中,轴左边的都<key,轴右边的都>key
//当while循环结束时,条件为start=end,为key所在的新位置,把该位置赋值key
in[start] = key;
//此时大家想象一下,轴在数组中间(start=end),说明把数组分成两部分,此时要对这两部分分别进行快排。
if(start>left)sortQuick(in,left,start-1);
if(end<right)sortQuick(in, end+1, right);
//return in;
}
}