快速排序;java实现
哨兵机制,“二分”思想;
思路:以左边第一个数为基准数,右边哨兵先走,遇到比基准数小的停下来;左边的哨兵再走,遇到比基准数大的停下来,或者遇到右边的哨兵停下来;如果左边的哨兵停下的时候没有与右边的哨兵相遇;则两个哨兵的数据交换;然后再次循环执行,直到相遇(而此时相遇的数是小于或者等于该基准数的);相遇后,把相遇位置的数据与基准数相交换;然后回溯递归;
代码实现:
``
package it.cast.Sort_Algorithm.Sort_Algorithm01;
import java.util.Arrays;
import java.util.Scanner;
public class QuickSort {
public static void main(String[] args) {
Scanner sc= new Scanner(System.in);
String line = sc.nextLine();
String[] strs = line.split(" ");
int[] array = new int[strs.length];
for (int i = 0; i < strs.length; i++) {
if(i==strs.length-1){
array[i]=Integer.parseInt(strs[i]);
break;
}
array[i]=Integer.parseInt(strs[i].substring(0,strs[i].length()-1));
}
FastSort(array,0,array.length-1);
System.out.println(Arrays.toString(array));
}
private static void FastSort(int[] array,int low,int high){
if(low>high){
return;
}
int left=low;
int right=high;
int temp=array[low];
while(left<right){
while(array[right]>=temp && (right>left)){
right--;
}
while(array[left]<=temp && (left<right)){
left++;
}
int demo=0;
if(left<right){
demo=array[left];
array[left]=array[right];
array[right]=demo;
}
}
array[low]=array[right];
array[right]=temp;
FastSort(array,low,right-1);
FastSort(array,right+1,high);
}
}