冒泡排序
选择排序
直接插入排序
希尔排序
快速排序
基数排序
堆排序
归并排序
归并排序就是利用归并的思想实现排序的方法。
它的原理是假设初始序列有N个记录,则可以看成是N个有序的子序列,每个子序列的长度为1,然后两两归并,得到N/2个长度为2或1的有序子序列,再两两归并…
如此重复,直至得到一个长度为N的有序序列为止,这种排序方法称为2路归并排序。
package com.sort;
import java.util.Arrays;
public class guibing_sort {
public static void main(String[] args) {
//原始待排序数组
int[] arr = {10,30,2,1,0,8,7,5,19,29};
//我们先给一个左右两边是有序的一个数组,先来进行归并操作
//int[] arr = {4,5,7,8,1,2,3,6};
//拆分
chaifen(arr,0,arr.length-1);
System.out.println(Arrays.toString(arr));
//归并
//guiBing(arr,0,3,arr.length-1);
}
private static void chaifen(int[] arr, int startIndex, int endIndex) {
//计算中间 索引
int centerIndex=(startIndex+endIndex)/2;
if (startIndex<endIndex){
chaifen(arr,startIndex,centerIndex);
chaifen(arr,centerIndex+1,endIndex);
guiBing(arr,startIndex,centerIndex,endIndex);
}
}
private static void guiBing(int[] arr, int startIndex, int centerIndex, int endIndex) {
//定义一个临时数组
int[] tempArr=new int[endIndex-startIndex+1];
//定义左边数组的起始索引
int i = startIndex;
//定义右边数组的起始索引
int j = centerIndex+1;
//定义临时数组的起始索引
int index = 0;
//比较左右两个数组的元素大小,往临时数组中放
while (i<=centerIndex&&j<=endIndex){
if (arr[i]<=arr[j]){
tempArr[index]=arr[i];
i++;
}else {
tempArr[index] = arr[j];
j++;
}
index++;
}
//处理剩余元素
while (i<=centerIndex){
tempArr[index] = arr[i];
i++;
index++;
}
while (j<=endIndex){
tempArr[index] = arr[j];
j++;
index++;
}
//将临时数组中的元素取到原素组中
for (int k = 0; k < tempArr.length; k++) {
arr[k+startIndex]=tempArr[k];
}
}
}