1、重点:
快排 && 归并
2、代码
package com.my.test.sort;
import java.util.Arrays;
public class Sort
{
// 插入排序
private static void insertSort(int[] arr)
{
int len = arr.length;
int j = 0;
for (int i = 0; i < len; i++)
{
int temp = arr[i];
for (j = i; j > 0 && temp < arr[j - 1]; j--)
{
arr[j] = arr[j - 1];
}
arr[j] = temp;
}
}
// 冒泡排序
private static void bubbleSort(int[] arr)
{
int len = arr.length;
for (int i = 0; i < len - 1; i++)
{
for (int j = 0; j < len - 1 - i; j++)
{
if (arr[j] > arr[j+1])
{
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}
private static int getMiddle(int[] arr, int low, int high)
{
int baseValue = arr[low];
while (low < high)
{
while (low < high && baseValue <= arr[high])
{
high--;
}
arr[low] = arr[high];
while (low < high && baseValue >= arr[low])
{
low++;
}
arr[high] = arr[low];
}
arr[low] = baseValue;
return low;
}
// 快排
private static void quickSort(int[] arr, int low, int high)
{
if(low < high)
{
int middle = getMiddle(arr, low, high);
quickSort(arr, low, middle - 1);
quickSort(arr, middle + 1, high);
}
}
public static void mergeSort(int[] arr)
{
if (arr == null || arr.length <= 0)
{
return;
}
mergeSort(arr, 0, arr.length - 1);
}
private static void mergeSort(int[] arr, int low, int high)
{
int mid = (low + high) / 2;
if (low < high)
{
mergeSort(arr, low, mid);
mergeSort(arr, mid + 1, high);
mergeArr(arr, low, mid, high);
}
}
// 合并两个有序数组
private static void mergeArr(int[] arr, int low, int mid, int high)
{
int len = high - low + 1;
int[] tmpArr = new int[len];
// 标识要合并的两个有序数组的索引
int first = low;
int second = mid + 1;
int newIdx = 0;
// 合并元素
while (first <= mid && second <= high)
{
if (arr[first] <= arr[second])
{
tmpArr[newIdx] = arr[first];
first++;
}
else
{
tmpArr[newIdx] = arr[second];
second++;
}
newIdx++;
}
// 加入剩余的元素
while (first <= mid)
{
tmpArr[newIdx] = arr[first];
newIdx++;
first++;
}
while (second <= high)
{
tmpArr[newIdx] = arr[second];
newIdx++;
second++;
}
// 赋值给arr
int temp = low;
for (int i = 0; i < len; i++, temp++)
{
arr[temp] = tmpArr[i];
}
}
public static void main(String[] args)
{
int[] arr = {4,5,6,1,2,0,3,7,8,9,10};
// quickSort(arr, 0, arr.length - 1);
// bubbleSort(arr);
// insertSort(arr);
mergeSort(arr);
System.out.println(Arrays.toString(arr));
}
}