MergeSort,归并排序
package _Sort.Algorithm /** * https://www.geeksforgeeks.org/merge-sort/ * https://www.cnblogs.com/chengxiao/p/6194356.html * best/worst/average Time complexity are O(nlogn), Space complexity is O(n), stable * # is Divide and Conquer algorithm * Basic idea * 1. find the middle point to divide the array into two halves; * 2. Call MergeSort for first halves; * 3. Call MergeSort for second halves; * 4. Merge two halves; * */ class MergeSort { fun sortArray(array: IntArray): IntArray { //create temp array first, avoid create temp in recursion val tempArray = IntArray(array.size) val left = 0 val right = array.size - 1 sort(array, left, right, tempArray) //printArray(array) return array } private fun printArray(array: IntArray) { for (item in array) { print("$item,") } } private fun sort(array: IntArray, left: Int, right: Int, tempArray: IntArray) { if (left < right) { val mid = (left + right) / 2 sort(array, left, mid, tempArray) sort(array, mid + 1, right, tempArray) merge(array, left, mid, right, tempArray) } } private fun merge(array: IntArray, left: Int, mid: Int, right: Int, tempArray: IntArray) { var i = left var j = mid + 1 var k = 0 //merge the sub arrays while (i <= mid && j <= right) { if (array[i] <= array[j]) { tempArray[k] = array[i] i++ } else { tempArray[k] = array[j] j++ } k++ } //add remaining elements of L[] while (i <= mid) { tempArray[k] = array[i] i++ k++ } //add remaining elements of R[] while (j <= right) { tempArray[k] = array[j] j++ k++ } //copy temp into original k=0 for (i in left until right+1) { array[i] = tempArray[k++] } } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
2019-03-26 1. Two Sum