Golang 排序

作者: 发条家的橙子 | 来源:发表于2019-07-07 04:36 被阅读0次

    215. 数组中的第K个最大元素

    1、使用sort源码

    func findKthLargest(nums []int, k int) int {
        sort.Ints(nums)
        //fmt.Println()
        return nums[len(nums)-k]
    }
    

    2、冒泡排序

    func bubble_sort(nums []int) []int {
        for i:=len(nums)-1; i >=0; i-- {
            for j:=0; j<i; j++ {
                if nums[j] < nums[j+1] {
                    nums[j], nums[j+1] = nums[j+1], nums[j]
                }
            }
        }
        return nums
    }
    
    
    func findKthLargest(nums []int, k int) int {
        sortnums:= bubble_sort(nums)
        return sortnums[k-1]
    }
    

    3、选择排序

    对比n后面所有数,将最大的和n交换来确定n位置的值

    func findKthLargest(nums []int, k int) int {
        for j := 0; j <= len(nums)-1; j++ {
            max := nums[j]
            tag := 0
            for i:=j+1; i<len(nums); i++{
                if max < nums[i] {
                    max = nums[i]
                    tag = i
                }
            }
            if tag != 0 {
                nums[j], nums[tag] = nums[tag], nums[j]
                // 排到k时直接返回
                if j+1 == k {
                     return nums[k-1]
                }
            }
        }
        return nums[k-1]
    }
    

    方法四:插入排序

    func insertSort(nums []int, k int) int  {
        for i:= 1; i < len(nums); i++ {
            insertNum := nums[i]
            j:=i-1
            for j>=0 && nums[j] < insertNum{
                nums[j+1] = nums[j]
                j--
            }
            if j + 1 != i{
                nums[j+1] = insertNum
            }
        }
        return nums[k-1]
    }
    

    方法五:快速排序

    func QuickSort(left, right int, nums []int) []int  {
        l := left
        r := right
        pivot := nums[(l+r)/2]
        for l < r {
            for nums[l] > pivot{
                l++
            }
            for nums[r] < pivot {
                r--
            }
    
            if l >= r {
                break
            }
    
            nums[l], nums[r] = nums[r], nums[l]
            //fmt.Println(nums)
            if nums[l] == pivot {
                r--
            }
            if nums[r] == pivot {
                l++
            }
    
        }
        if l == r {
            l++
            r--
        }
    
        if left < r{
            QuickSort(left, r, nums)
        }
        if right > l {
            QuickSort(l, right, nums)
        }
    
    
        return nums
    }
    
    func findKthLargest(nums []int, k int)int {
        // 方法五:快速排序
        return QuickSort(0 , len(nums)-1, nums)[k-1]
    }

    相关文章

      网友评论

        本文标题:Golang 排序

        本文链接:https://www.haomeiwen.com/subject/ygwmhctx.html