Java快速排序和归并排序详解

<div class="article">
<div class="show-content" data-note-content="">
<div class="show-content-free">

快速排序

概述

快速排序算法借鉴的是二叉树前序遍历的思想,最终对数组进行排序。

优点:

对于数据量比较大的数组排序,由于采用的具有二叉树二分的思想,故排序速度比较快

局限

只适用于顺序存储结构的数据排序(数组 ,ArrayList等),不适用于链式的数据结构

算法实现思路

一.将目标数组转化为这样一个数组。数组中的某个位置左边的所有数据都比该位置的数据小,该位置右边的数据都比该位置数据大。

实现思路:

1.取出数组第0个数据
2.从数组最右边开始遍历,如果遍历位置的数据比第0个位置的数据小,将该位置的数据赋值给左边指针停留下的位置。

3.改变遍历方向,从左边开始开始遍历,如果发现左边的数据比第0个位置的数据大,将该位置的数据赋值给2步骤停留下来的位置,并变换方向。

4.循环2、3步骤直到左右遍历到的下标重合 5.将取出的第0个位置的值赋值给循环结束后左右指针停留下的位置

二. 借鉴前序遍历的思路,递归,最终完成排序。

代码实现

quickSort([] array, start, (start >= key = left = right = direction = (left < ( i = right; i > left; i-- (array[i] < array[left++] = right = direction = ! right = } ( i = left; i < right; i++ (array[i] > array[right--] = left = direction = ! left = array[left] = quickSort(array,start,left - 1 quickSort(array,left + 1 }

结果测试

[] array = []{1,3,4,10,2,5,6,9,7,8 quickSort(array,array.length - 1 ( i = 0; i < array.length; i++ }

结果打印

1 2 3 4 5 6 7 8 9 10
归并排序

概述

归并排序与快速排序相同,同样是借鉴二叉树的思想,时间复杂度O(n),与快速排序一样是大量数据排序的最优方式之一。

思路分析

归并排序是将目标数组分成左右两个数组,左右两个数组必须是有序的,然后对这两个数组合并从而实现排序。对于任意的数组都可以将所有的数据分成若干个数组,每个数组中都只有一个元素,然后两两合并。(因此,归并排序的内存开销会比快速排序多)

代码实现

mergeSort([] array, left, (left >= mid = (left + right) >> 1 mergeSort(array,mid + 1 merge(array,right); merge([] array, mid, leftSize = mid - rightSize = right - mid + 1 [] leftArray = [] rightArray = System.arraycopy(array,leftArray,0 System.arraycopy(array,mid,rightArray,rightSize); index= leftIndex = 0 rightIndex = 0 (leftIndex (leftArray[leftIndex]< array[index++] = leftArray[leftIndex++ } array[index++] = rightArray[rightIndex++ (leftIndex< array[index++] = leftArray[leftIndex++ (rightIndex< array[index++] = rightArray[rightIndex++ }

测试代码

[] array = []{1,8 mergeSort(array,array.length - 1 ( i = 0; i < array.length; i++ }

结果打印

1 2 3 4 5 6 7 8 9 10

相关文章

在 Java 语言中,提高程序的执行效率有两种实现方法,一个是...
在 Java 中停止线程的实现方法有以下 3 种: 自定义中断标识...
在多线程编程中,wait 方法是让当前线程进入休眠状态,直到另...
在 Java 语言中,并发编程都是通过创建线程池来实现的,而线...
sleep 方法和 wait 方法都是用来将线程进入休眠状态的,并且...
在 Java 中,线程的创建方法有 7 种,分为以下 3 大类: 继承...