归并排序的基本思想是:
归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有 序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。
归并排序基本步骤图解:
归并排序的特性:
1丶时间复杂度:O(N*logN)
2丶空间复杂度:O(N)
3丶稳定性:稳定
下面是代码实现:
public static void merge(int[] array,int start,int mid,int end){
int[] tempArray = new int[array.length];
int tempIndex = start;
int start2 = mid+1;
int i = start;
//两个归并段都有数据的时候
while(start <= mid && start2 <= end){
if(array[start] <= array[start2]){
tempArray[tempIndex++] = array[start++];
}else{
tempArray[tempIndex++] = array[start2++];
}
}
while(start <= mid){
tempArray[tempIndex++] = array[start++];
}
while (start2 <= end){
tempArray[tempIndex++] = array[start2++];
}
while (i <= end){
array[i] = tempArray[i];
i++;
}
System.out.println(Arrays.toString(array));
}
//归并排序
public static void mergeSort(int[] array,int start,int end ){
if(start >= end){
return;
}
int mid = (start+end)/2;
mergeSort(array,start,mid);//递归左边
mergeSort(array,mid+1,end);//递归右边A
//肯定是一个一个的有序序列
merge(array,start,mid,end);
}
测试类代码:
int[] array = {10,6,7,1,3,9,4,2};
mergeSort(array,0,array.length-1);
System.out.println(Arrays.toString(array));
下面是运行结果:
以上就是几种比较基础并且非常重要的排序。
除此之外,还有比较特殊的排序,比如不需要比较的计数排序,还有变魔术一般的基数排序,通过入桶和出桶进行排序。
下面是几种基础排序的特性总结: