2025-01-17 归并排序

This commit is contained in:
liangjinglin 2025-01-18 00:38:48 +08:00
parent a041c9c815
commit 84c33359e7
2 changed files with 86 additions and 0 deletions

View File

@ -0,0 +1,82 @@
package SortAlgori;
public class MergeSort {
private int[] arr;
private int[] temp;
public MergeSort(int[] arr){
this.arr = arr;
// this.arr = new int[]{8,4,5,7,1,3,6,2};
this.temp = new int[arr.length];
}
public void mergeSort(int left, int right){
while(left >= right){
return;
}
int mid = (left + right)/2;
mergeSort(left,mid);
mergeSort(mid+1,right);
int leftIndex = left;
int rightIndex = mid+1;
int index = left;
while(index <= right){
if(arr[leftIndex] <= arr[rightIndex]){
temp[index] = arr[leftIndex];
leftIndex ++;
index ++;
}else{
temp[index] = arr[rightIndex];
rightIndex ++;
index ++;
}
if(leftIndex > mid){
while(rightIndex <= right){
temp[index] = arr[rightIndex];
rightIndex ++;
index ++;
}
break;
}
if(rightIndex > right){
while(leftIndex <= mid){
temp[index] = arr[leftIndex];
leftIndex ++;
index ++;
}
break;
}
}
for(int i=left; i<=right; i++){
arr[i] = temp[i];
}
}
public void show(){
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
System.out.println();
}
public static void main(String[] args) {
int[] arr = new int[80000];
System.out.println("排序前的序列:");
for(int i=0; i<80000; i++){
arr[i] = (int)(Math.random()*100000);
System.out.print(arr[i] + " ");
}
MergeSort mergeSort = new MergeSort(arr);
long startTime = System.currentTimeMillis();
mergeSort.mergeSort(0,arr.length-1);
long endTime = System.currentTimeMillis();
System.out.println("排序后的序列:");
mergeSort.show();
System.out.println("排序所花费的时间:" + (endTime - startTime) + "ms");
}
}

View File

@ -40,11 +40,14 @@ public class QuickSort {
}
int leftIndex = left;
int rightIndex = right;
// 以中间的数作为基准
int mid = arr[(left+right)/2];
while (leftIndex < rightIndex){
// 如果当前左游标小于中间数则继续往下找直到找到一个大于mid的数
while (arr[leftIndex] < mid){
leftIndex ++;
}
// 如果当前右游标大于中间数则继续往上找直到找到一个小于mid的数
while (arr[rightIndex] > mid){
rightIndex --;
}
@ -52,6 +55,7 @@ public class QuickSort {
if(leftIndex >= rightIndex){
break;
}
// 将当前找到左右游标进行一次交换
swap(leftIndex,rightIndex);
// 如果交换完后发现arr[leftIndex] == midrightIndex--防止出现死循环