The most Common Sorting Algorithms

144 阅读1分钟

工程中的排序算法应用

各语言内置库都会使用「混合排序算法」,在不同场景下会使用不同的排序算法, 比如在数据长度较少时会采用「插入排序Insert Sort」(时间复杂度O(n^2)), 其他情况会使用「快速排序Quick Sort」, 但是快排的效率取决于pivot选择, 最差情况下时间复杂度会降低到O(n^2), 所以有的会选择「堆排序Heap Sort」作为默认的排序算法, 因为堆排稳定在O(n*logn)

各排序算法性能汇总

AlgorightmExpected Time ComplexityThe Worst Time ComplexityThe Best Time ComplexitySpace Complexity
Quick Sortnlog2(n)n*log_2(n)n2n^2 (sequence is reverse)nlog2(n)n*log_2(n)11
Insert Sortn2n^2n2n^2nn (already sequential)11
Bubble Sortn2n^2n2n^2n2n^21
Select Sortn2n^2n2n^2n2n^21

Quick Sort

Go Implement

// Given Format
func QuickSort(a []int) []int {
   if len(a) < 1 {
      return a
   }
   recursionQuickSort(a, 0, len(a)-1)
   return a
}


func recursionQuickSort(a []int, l, r int) {
   if l<0 || r>len(a)-1 || l>=r { // Edge Case
      return
   }

   pivot := a[l]
   left, right := l, r
   for left < right {
      for left < right && a[right] >= pivot {
         right --
      }

      for left < right && a[left] <= pivot {
         left ++
      }

      a[left], a[right] = a[right], a[left]
   }

   a[left], a[l] = a[l], a[left]

   // Next Recursion
   recursionQuickSort(a, l, left - 1)
   recursionQuickSort(a, left + 1, r)
}

Insert Sort

Go Implement

func InsertSort(a []int) []int {
   if len(a) < 2 {
      return a
   }

   for i:=1;i<len(a);i++ {
      for j:=i;j>0;j-- {
         if a[j] < a[j-1] {
            a[j], a[j-1] = a[j-1], a[j]
         } else {
            break // 及时停止,节省时间
         }
      }
   }

   return a
}

Bubble Sort

Go Implement

func BubbleSort(a []int) []int {
   if len(a) < 2 {
      return a
   }

   for i:=len(a)-1;i>0;i-- {
      for j:=1;j<=i;j++ {
         if a[j-1] > a[j] {
            a[j-1], a[j] = a[j], a[j-1]
         }
      }
   }

   return a
}

Select Sort

Go Implement

func SelectSort(a []int) []int {
   if len(a) < 2 {
      return a
   }

   for i:=len(a)-1;i>0;i-- {
      max := 0
      for j:=0;j<=i;j++ {
         if a[j] > a[max] {
            max = j
         }
      }
      a[i], a[max] = a[max], a[i]
   }

   return a
}

REF

  1. mojotv.cn/algorithm/g…
  2. https://tech.byte_dance.net/articles/7058110551951409165?from=lark_all_search