交换排序---快速排序
2016-03-21 12:24
337 查看
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;
}
}
/**
* @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;
}
}
相关文章推荐
- NFS的安装、配置与使用
- Android 6.0 HttpClient弃用问题
- tcp/ip ---链路层
- Java学习第一步——JDK安装及Java环境变量配置
- 从2月14号开始,上传AppStore会碰到:Failed to locate or generate matching signing assets
- appium定位元素java篇
- 编译vlc android arm64-v8a
- 快速排序C++
- 第三周学习进度表
- 设计模式之1--五大原则
- 欢迎使用CSDN-markdown编辑器
- 在ubuntu上搭建svn服务器
- 软测实验课安排和考试
- AndroidUI布局----大白话版....
- TR111 and TR069 function development note (2)
- 166. Fraction to Recurring Decimal
- 数据库中的事务理解
- [LeetCode][二叉树]Maximum Depth of Binary Tree
- 删除文件
- LeetCode Minimum Height Trees