leetcode-不同的排序算法及其运行时间

解题思路

排序方法运行时间
库函数排序8ms
类选择排序208ms
冒泡排序204ms
堆排序4ms

代码

func findKthLargest(nums []int, k int) int {
    // 库函数排序
    //sort.Ints(nums)
    // 类选择排序
    /*for i:=0;i<len(nums);i++{
        for j:=i+1;j<len(nums);j++{
            if nums[i]>nums[j]{
                tmp:=nums[i]
                nums[i] = nums[j]
                nums[j] = tmp
            }
        }
    }*/
    // 冒泡排序
    /*for i:=0;i<len(nums);i++{
        for j:=0;j<len(nums)-i-1;j++{
            if nums[j]>nums[j+1]{
                tmp:=nums[j]
                nums[j] = nums[j+1]
                nums[j+1] = tmp
            }
        }
    }*/
    // 堆排序
    sortHeap(nums)
    return nums[k-1]
}
// 小顶堆, 降序
func adjustMinHeap(arr []int, i int, length int){
    temp := arr[i]
    for k := 2*i+1;k < length;k = k*2+1{
        if k+1 < length && arr[k] > arr[k+1]{
            k++
        }
        if arr[k] < temp {
            arr[i] = arr[k]
            i = k
        }else {
            break
        }
    }
    arr[i] = temp
}
func sortHeap(arr []int)  {
    // 1. 构建大顶堆
    for i := len(arr)/2-1;i>=0;i-- {
        adjustMinHeap(arr,i,len(arr))
    }
    // 2. 交换堆顶与堆尾元素,交换完毕后,将访问不到堆尾
    for j := len(arr)-1;j>0;j-- {
        arr[0],arr[j] = arr[j],arr[0]
        adjustMinHeap(arr,0,j)
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值