归并排序(mergeSort)的kotlin实现

归并排序的核心是把两个有序数组合并为一个新的有序数组,具体操作就是通过递归的方式层层执行核心方法。

fun mergeSort(array: IntArray): IntArray {
    //嵌套函数
    fun merge(left: IntArray, right: IntArray): IntArray {

        val ret = IntArray(left.size + right.size)
        var i = 0
        var p = 0
        var q = 0
        while (p < left.size && q < right.size) {
            if (left[p] <= right[q]) {
                ret[i++] = left[p++]
            } else {
                ret[i++] = right[q++]
            }
        }

        if (p == left.size) {
            for (index in q until right.size) {
                ret[i++] = right[index]
            }
        } else {
            for (index in p until left.size) {
                ret[i++] = left[index]
            }

        }

        return ret
    }

    if (array.size < 2)
        return array

    val middle = array.size / 2
    val left = array.copyOfRange(0,middle)
    val right = array.copyOfRange(middle,array.size)
    return merge(mergeSort(left), mergeSort(right))
}

kotlin小白,有错误请不吝指教~

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 归并排序(Merge Sort)是速度仅次于快速排序的稳定算法(关于稳定性上文希尔排序有解释),是一个很常用的O(...
    皮蛋solo粥阅读 8,161评论 3 8
  • 归并排序实际是使用了分治再合并的思想: 分治:它每轮会把数组分割成2分部分,如果分割的部分还很多数,可以按照这个方...
    miao8862阅读 3,003评论 0 0
  • 归并排序 前言 本篇文章是排序算法系列的第四篇,学习归并排序 后面这段话将作为排序算法系列博客每一篇的开头: 为避...
    coderZ666阅读 1,450评论 0 0
  • 非递归归并排序算法 非递归排序与递归排序相反,将一个元素与相邻元素构成有序数组,再与旁边数组构成有序数组,直至整个...
    Jack_deng阅读 10,517评论 0 6
  • 1、快速排序 快速排序是冒泡排序的改进版,也是最好的一种内排序,在很多面试题中都会出现,也是作为程序员必须掌握的一...
    雪飘千里阅读 3,496评论 0 1

友情链接更多精彩内容