diff --git a/src/dataANDcalc/java/SortAlgori/MergeSort.java b/src/dataANDcalc/java/SortAlgori/MergeSort.java new file mode 100644 index 0000000..4950273 --- /dev/null +++ b/src/dataANDcalc/java/SortAlgori/MergeSort.java @@ -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"); + } +} diff --git a/src/dataANDcalc/java/SortAlgori/QuickSort.java b/src/dataANDcalc/java/SortAlgori/QuickSort.java index 337933b..7ebd579 100644 --- a/src/dataANDcalc/java/SortAlgori/QuickSort.java +++ b/src/dataANDcalc/java/SortAlgori/QuickSort.java @@ -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] == mid,rightIndex--,防止出现死循环