交换排序---快速排序

来源:互联网 发布:区域生长算法 matlab 编辑:程序博客网 时间:2024/05/01 17:22

public class QuickSort {


/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] arr = new int[]{2,8,-6,71,12,52,1,-3};
System.out.println("原来元素:"+java.util.Arrays.toString(arr));
quickSort(arr);
System.out.println("排序后:"+java.util.Arrays.toString(arr));

}
public static void quickSort(int[] arr){
subSort( arr,0,arr.length-1);
};
private static void subSort(int[] arr,int begin,int end){
int i = 0;
int j = end+1;
//需要排序
if(begin<end){
//先从左面找到 大于 分界值的 索引,
while(true){
while(i<end&&arr[++i]<=arr[begin]);
// {
//// i++;
// // if(i==j){
// // break;
// // }
// }
//从右面找到 小于 分界值的 元素,
while(j>begin&&arr[--j]>=arr[begin]);
// {
//// j--;
//// if(i==j){
//// break;
//// }
// }
if(i<j){
swap(arr,i,j);
System.out.println("排序后1:"+java.util.Arrays.toString(arr));
}
else{
break;
}
// //i>j 进行下次循环
// if(i>j){
// swap(arr,i,j);
// subSort(arr, begin, end);
// System.out.println("排序后2:"+java.util.Arrays.toString(arr));
// }
}
//
swap(arr,begin,j);
System.out.println("排序后2:"+java.util.Arrays.toString(arr));
//递归左子序列
subSort(arr,begin,j-1);
System.out.println("排序后3:"+java.util.Arrays.toString(arr));
//递归右子序列
subSort(arr,j+1,end);
System.out.println("排序后4:"+java.util.Arrays.toString(arr));
}
}
private static void swap(int[] arr,int i,int j){
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}

}
0 0
原创粉丝点击