快速排序
思路:
1、从最右端开始找出小于基准数的数以及其位置
2、从最左端出发找出大于其基准数的数以及其位置
3、交换两个数
4、交换基准数跟碰头数(最右端开始向前的标记等于最右端向后的标记)
5、处理数组中所有小于基准数的数字
7、处理数组中所有大于基准数的数字
package DataStruct.Sort; import java.util.Arrays; public class QuickSort { public static void main(String[] args) { int arr[]=new int[]{-1,-2,-4,1,2,0,9}; quickSort(arr,0,arr.length-1); System.out.println(Arrays.toString(arr)); } public static void quickSort(int []arr,int start,int end) { if (start<end) { //将数组中start位置(刚开始标准数位置为0)元素作为标准数 int stard=arr[start]; //记录需要排序的下标 int low=start; int high=end; //找出比标准数大或小的数 while(low<high) { //从最右端开始找出小于基准数stard的数以及其所在位置high while (low<high&&stard<=arr[high]) { high--; } //从最左端开始找出大于基准数stard的数以及其所在位置low while (low<high&&arr[low]<=stard) { low++; } //交换low跟high两个数 if (low<high) { int temp=arr[low]; arr[low]=arr[high]; arr[high]=temp; } } //交换基准数跟碰头数(low=high时的数) arr[start]=arr[low]; arr[low]=stard; //处理所有比标准数小的数字 quickSort(arr,start,low); //处理所有比标准数大的数字 quickSort(arr,low+1,end); } } }