Java快速排序
package algorithm; import java.util.Arrays; public class QuickSort02 { //快速排序,从数组中选定一个值,将其他小于这个值的元素置于前,否则置于后,依此类推 public static void main(String[] args) { int [] arr={98,1,5,71,46,-1,-67,789,15,64,39,71,46,1}; quickSort(arr, 0, arr.length-1); System.out.println(Arrays.toString(arr)); } public static void quickSort(int []arr,int left,int right){ int l=left,r=right,mid=arr[(l+r)/2]; /* mid=(l+r)/2,arr[mid] 这里不能标记mid的索引,然后从数组中按索引取元素,因为在遍历循环的时候数组元素顺序是在变化的, * (l+r)/2处的元素会变化 ,所以应该直接将这个值取出来; */ while(l<r){ //找到左边第一个大于或等于arr[mid]的元素 while(arr[l]<mid){ l+=1; } //找到右边倒数第一个小于或等于arr[mid]的元素 while(arr[r]>mid){ r-=1; } //判断找到的左右元素是否在mid的两边 if(l>=r) break; //确认在两边就开始进行交换 int temp=0; temp=arr[l]; arr[l]=arr[r]; arr[r]=temp; //因为存在找到的交换元素是等于arr[mid]的情况,所以要进行处理 if(arr[l]==mid) r-=1; if(arr[r]==mid) l+=1; } //跳出循环的时候就是l==r;这个时候要处理,让他们交错而过,为递归做准备 if(l==r) { l+=1; r-=1; } //开始递归 //将第一次排序后的前后数组进行排序; if(left<r) quickSort(arr, left, r); if(l<right) quickSort(arr,l, right); } }