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)
}
}