快速排序和冒泡排序 | 青训营笔记

59 阅读3分钟

快速排序

快速排序是一种常用的排序算法,它的基本思想是通过分治的思想将一个大的数组拆分成多个小的子数组,以达到排序的目的。具体的过程如下:

  1. 首先选择数组中的一个元素作为基准值(pivot),一般选择数组中的第一个元素。
  2. 将数组中小于等于基准值的元素移到基准值的左边,将大于基准值的元素移到右边。
  3. 递归地对左右两个子数组进行快速排序,直到子数组长度为 1 或 0。
  4. 合并排序后的子数组,得到最终的有序数组。

使用 Go 语言实现快速排序算法的示例代码如下:

package main

import "fmt"

func quickSort(arr []int, left, right int) {
  if left >= right {
    return
  }
  pivot := arr[left]
  i, j := left+1, right
  for i <= j {
    if arr[i] > pivot && arr[j] <= pivot {
      arr[i], arr[j] = arr[j], arr[i]
      i++
      j--
    } else {
      if arr[i] <= pivot {
        i++
      }
      if arr[j] > pivot {
        j--
      }
    }
  }
  arr[left], arr[j] = arr[j], arr[left]
  quickSort(arr, left, j-1)
  quickSort(arr, j+1, right)
}

func main() {
  arr := []int{10, 80, 30, 90, 40, 50, 70}
  quickSort(arr, 0, len(arr)-1)
  fmt.Println(arr)
}

在上述代码中,我们定义了一个 quickSort 函数用于实现快速排序。left 表示数组第一个元素的下标,right 表示数组最后一个元素的下标。在函数内部,我们首先选中数组中的第一个元素作为基准值,并将数组按照基准值划分成两个子数组。然后递归地对两个子数组进行排序,直到各子数组的元素个数为 1 或 0。最后将排好序的子数组合并成一个有序数组。

冒泡排序

冒泡排序是一种基础的排序算法,它的基本思想是对待排序数组中相邻的元素进行比较,若前一个元素大于后一个元素,则交换它们的位置。重复执行以上步骤直到数组排好序。具体的过程如下:

  1. 从数组的第一个元素开始,对相邻的两个元素进行比较,如果前一个元素大于后一个元素,则交换它们的位置。
  2. 对数组的每一个相邻的元素重复步骤 1,直到扫描到数组的倒数第二个元素。
  3. 重复执行步骤 1 和 2,直到数组排好序。

使用 Go 语言实现冒泡排序算法的示例代码如下:

package main
import "fmt"
func bubbleSort(arr []int) {
  n := len(arr)
  for i := 0; i < n-1; i++ {
    for j := 0; j < n-1-i; j++ {
      if arr[j] > arr[j+1] {
        arr[j], arr[j+1] = arr[j+1], arr[j]
      }
    }
  }
}
func main() {
  arr := []int{10, 80, 30, 90, 40, 50, 70}
  bubbleSort(arr)
  fmt.Println(arr)
}

在上述代码中,我们定义了一个 bubbleSort 函数用于实现冒泡排序。在内部实现中,我们使用了双重循环,外层循环从数组的第一个元素开始,内层循环对相邻两个元素进行比较,交换它们的位置。重复执行内层循环直到扫描到数组的倒数第二个元素。