java实现的冒泡、插入、快排、二分归并排序算法
四种排序算法的类:
package sort_algorithm;
public class SortAlgorithm {
public void bubble(int []arr) {
int len=arr.length;
for(int i=0;i<len;i++) {
for(int j=0;j<len-1-i;j++) {
if(arr[j]>arr[j+1]) {
int t=arr[j+1];
arr[j+1]=arr[j];
arr[j]=t;
}
}
}
}
public void insert(int []arr) {
int len=arr.length;
int t,j;
for(int i=1;i<len;i++) {
j=i;
t=arr[i];
while(j>0 && arr[j]<arr[j-1]) {
arr[j]=arr[j-1];
j--;
arr[j]=t;
}
}
}
public void quicksort(int arr[], int start, int end) {
int i, j, t;
if (start > end) {
return;
}
i = start;
j = end;
t = arr[i];
while (i < j) {
while (i < j && arr[j] >= t)
j--;
if (i < j)
arr[i++] = arr[j];
while (i < j && arr[i] < t)
i++;
if (i < j)
arr[j--] = arr[i];
}
arr[i] = t;
quicksort(arr, start, i - 1);
quicksort(arr, i + 1, end);
}
public void binaryMerge(int []arr) {
binary(arr,0,arr.length-1);
}
public void binary(int[]arr,int start,int end) {
if(start>=end) {
return;
}
int mid=(start+end)/2;
binary(arr, start, mid);
binary(arr, mid+1, end);
merge(arr,start,mid,end);
}
public void merge(int []arr,int start,int mid,int end) {
int i=start;
int j=mid+1;
int t[]=new int[end - start + 1];
int k=0;
while(i<=mid && j<=end) {
if(arr[i]>arr[j]) {
t[k++]=arr[j++];
}else {
t[k++]=arr[i++];
}
}
while (i <= mid) {
t[k++] = arr[i++];
}
while (j <= end) {
t[k++] = arr[j++];
}
for(int m=start;m<=end;m++) {
arr[m]=t[m-start];
}
}
}
测试类:
package sort_algorithm;
import java.util.Arrays;
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
int n;
while(true) {
Scanner scanner=new Scanner(System.in);
System.out.println("请输入生成随机数组的长度:");
n=scanner.nextInt();
int[]arr= new int[n];
for(int i=0;i<n;i++) {
arr[i]=(int)(Math.random()*n);
}
System.out.println("随机生成的数组:"+ Arrays.toString(arr));
SortAlgorithm sortAlgorithm=new SortAlgorithm();
long startTime,endTime;
System.out.println("请输入排序方法的编号:1.冒泡法 2.插入法 3.快速排序 4.二分归并");
int choice=scanner.nextInt();
switch (choice) {
case 1:
startTime=System.currentTimeMillis();
sortAlgorithm.bubble(arr);
endTime=System.currentTimeMillis();
System.out.println("排序后的数组:"+Arrays.toString(arr));
System.out.println("耗时:"+(endTime-startTime)+"ms");
break;
case 2:
startTime=System.currentTimeMillis();
sortAlgorithm.insert(arr);
endTime=System.currentTimeMillis();
System.out.println("排序后的数组:"+Arrays.toString(arr));
System.out.println("耗时:"+(endTime-startTime)+"ms");
break;
case 3:
startTime=System.currentTimeMillis();
sortAlgorithm.quicksort(arr,0,arr.length-1);
endTime=System.currentTimeMillis();
System.out.println("排序后的数组:"+Arrays.toString(arr));
System.out.println("耗时:"+(endTime-startTime)+"ms");
break;
case 4:
startTime=System.currentTimeMillis();
sortAlgorithm.binaryMerge(arr);
endTime=System.currentTimeMillis();
System.out.println("排序后的数组:"+Arrays.toString(arr));
System.out.println("耗时:"+(endTime-startTime)+"ms");
break;
default:
System.out.println("没有此选项!");
break;
}
}
}
}
|