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)
    }
}
posted @ 2020-08-05 10:31  litchi99  阅读(291)  评论(0编辑  收藏  举报