快排和归并浅析
快速排序法
- 确定分界点:一般为数组最左边,最右边或者中间的元素
- 调整范围:左段的所有数应该都小于分界点的数,右段的数应该都大于分界点的数
设置两个指针,一个指向数组最左边,一个指向数组最右边。左指针向右移动,直到遇到不小于分界点的数,进而右指针向左移动,直到遇到不大于分界点的数,然后将左右指针指向的数进行交换。交换后,左指针继续向右移动,循环上面的过程,直到左右两指针相遇,此时左右两段应该已经被分好。
- 递归处理左右两段
1 | public static void quickSort(int[] arr, int l, int r) { |
归并排序法
- 确定分界点:分界点为数组的中间元素,
mid = (l + r)/2
- 递归排序左右两段
- 归并 —— 合二为一:将两个排好序的数组合并成一个排好序的数组
新建一个等大的数组,原数组的左段和右段逐一对比,哪个更小就放进新数组,直到左段到分界点或右段到数组末尾,此时将剩下的部分全部放进新数组,此时新数组中的元素应该已经排序好了。最后将新数组的数组传给原数组。
1 | public static void mergeSort (int[] arr,int[] arr2, int l, int r) { |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Czar!
评论
ValineDisqus