快速排序:
public class Quicksort {
private int midNum(int[] arr,int begin,int end){
int _begin=begin,t;
while(begin<end){
if (arr[end]>=arr[_begin]) end--;
else {
if (arr[begin]<=arr[_begin]) begin++;
else {
t=arr[begin];
arr[begin]=arr[end];
arr[end]=t;
}
}
}
if (begin!=_begin){
t=arr[_begin];
arr[_begin]=arr[begin];
arr[begin]=t;
}
return begin;
}
public void quick(int[] arr,int begin,int end){
if (begin>=end) return;
int mid=midNum(arr, begin, end);
quick(arr,begin,mid-1);
quick(arr,mid+1,end);
}
public static void main(String[] args) {
int[] arr={3,2,8,54,9,45,5};
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]+"\t");
}
System.out.println();
Quicksort qk = new Quicksort();
qk.quick(arr,0,arr.length-1);
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]+"\t");
}
}
运行结果如下:
归并排序:
public class Merge {
public static void merge(int[] arr,int low,int mid,int high,int[] temp){
int i=0;
int j=low,k=mid+1;//左边序列和右边序列起始索引
while(j<=mid&&k<=high){
if (arr[j]<arr[k]){
temp[i++]=arr[j++];
}else {
temp[i++]=arr[k++];
}
}
//若左边序列还有剩余,则将其全部拷贝进temp[]中
while (j<=mid){
temp[i++]=arr[j++];
}
while (k<=high){
temp[i++]=arr[k++];
}
for (int t = 0; t < i; t++) {
arr[low+t]=temp[t];
}
}
public static void mergeSort(int[] arr,int low,int high,int[] temp){
if (low<high){
int mid=(low+high)/2;
mergeSort(arr, low, mid, temp);
mergeSort(arr,mid+1,high,temp);
merge(arr,low,mid,high,temp);
}
}
public static void main(String[] args) {
int[] arr={3,2,8,54,9,45,5};
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]+"\t");
}
System.out.println();
int[] temp=new int[arr.length];
mergeSort(arr,0,arr.length-1,temp);
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]+"\t");
}
}
}
运行结果如下: