public class ArraySort {
/**
* @param args
*/
// 数组为全局变量 便于快速排序测试
static int[] arr=new int[]{7,5,32,4,8,1,6,9,10,15};
public static void main(String[] args) {
// TODO Auto-generated method stub
// 选择排序
//selectSort(ArraySort.arr);
// 冒泡排序
//bubbleSort(ArraySort.arr);
// 快速排序
// 快速排序递归算法的左半部分测试代码
// int result=sortQ(ArraySort.arr,0,ArraySort.arr.length-1);
// System.out.println(result);
// result=sortQ(ArraySort.arr,0,result-1);
// System.out.println(result);
// 快速排序递归算法的右半部分测试代码
// int result=sortQ(ArraySort.arr,0,ArraySort.arr.length-1);
// System.out.println(result);
// result=sortQ(ArraySort.arr,result+1,ArraySort.arr.length-1);
// System.out.println(result);
quickSort(0,ArraySort.arr.length-1);
printArr(ArraySort.arr);
}
//选择排序 把最小的拎出来放在前面,或者把最大的拎出来放在前面
public static void selectSort(int[] arr){
int temp=0;
for(int i=0;i<arr.length-1;i++){
for(int j=i+1;j<arr.length;j++){
if(arr[i]>arr[j]){
swap(i,j,temp,arr);
}
}
}
}
//冒泡排序法 相邻的两个换位置。从小到大排序,相邻两个换位置一次排序实现最大的在最右边,同理从大到小排序,最小的在最右边
public static void bubbleSort(int[] arr){
int temp=0;
for(int i=0;i<arr.length-1;i++){
for(int j=0;j<arr.length-1-i;j++){
if(arr[j]<arr[j+1])
swap(j,j+1,temp,arr);
}
}
}
// 快速排序
public static void quickSort(int low,int hight){
//快速排序 递归实现
if(low<hight){
int result=sortQ(ArraySort.arr,low,hight);
quickSort(low,result-1);
quickSort(result+1,hight);
//System.out.println(result);
}
}
public static int sortQ(int[] arr,int low,int hight){
//此方法作用一次递归实现小于参考值得在左边,大于参考值的在右边
int key=arr[low];
int temp=0;
while(low<hight){
while(low<hight && arr[hight]>key){
hight--;
}
while(low<hight && arr[low]<key){
low++;
}
temp=arr[low];
arr[low]=arr[hight];
arr[hight]=temp;
}
return low;
}
// 交换位置函数
public static void swap(int i,int j,int temp,int[] arr){
temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
// 打印数组函数
public static void printArr(int[] arr){
System.out.print("[");
for(int i=0;i<arr.length;i++){
if(i!=arr.length-1)
System.out.print(arr[i]+",");
else
System.out.print(arr[i]+"]");
}
}
}
|
|