java练习题之冒泡排序与递归快排的比较
定义两个内容一样的数组,分别是使用冒泡排序和快速排序,对其进行排序,比较两种排序的效率
public class Kuaipai_sort {
public static void main(String[] args) {
int[] arr = {6, 1, 4, 9, 3, 5, 7, 8, 10};
int[] arr1 = {6, 1, 4, 9, 3, 5, 7, 8, 10};
//冒泡排序
long start1=System.currentTimeMillis(); //计算冒泡排序开始的时间
maoPao(arr1);
printArr(arr1);
long end1=System.currentTimeMillis();//计算冒泡排序结束的时间
System.out.println("冒泡排序:"+(end1-start1)+"毫秒");
//快速排序
long start2=System.currentTimeMillis();
kuaiPai(arr,0,arr.length-1);
printArr(arr);
long end2=System.currentTimeMillis();
System.out.println("快速排序:"+(end2-start2)+"毫秒");
}
private static void maoPao(int[] arr1) {
for (int i = 0; i < arr1.length-1; i++) {
for (int j = 0; j < arr1.length-1-i; j++) {
if(arr1[j]>arr1[j+1]){
//一个数 被另一个数 异或两次 返回还是原数本身
arr1[j]=arr1[j]^arr1[j+1];
arr1[j+1]=arr1[j]^arr1[j+1];
arr1[j]=arr1[j]^arr1[j+1];
}
}
}
}
private static void printArr(int[] arr) {
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]+" ");
}
System.out.println();
}
private static void kuaiPai(int[] arr, int left, int right) {
//存储一下初始索引
int left_0=left;
int right_0=right;
//终止递归,也是方法的结束口
if(left_0>=right){
return;
}
//基准数
int baseNumber = arr[left_0];
while(left!=right){
//先从右边开始查找 比基准数小的数
while(arr[right]>=baseNumber && left<right){
right--;
}
//从左边边开始查找 比基准数大的数
while(arr[left]<=baseNumber && left<right){
left++;
}
//交换 比基准数大的数和比基准数小的数 的位置
int temp=arr[right];
arr[right]=arr[left];
arr[left]=temp;
}
int temp=arr[right];
arr[right]=arr[left_0];
arr[left_0]=temp;
//递归下去
kuaiPai(arr,left_0,right-1);
kuaiPai(arr,right+1,right_0);
}
}