- 冒泡排序(Bubble Sort)
```func bubbleSort(arr []int) {
n := len(arr)
for i := 0; i < n - 1; i++ {
for j := 0; j < n - i - 1; j++ {
if arr[j] > arr[j+1] {
arr[j], arr[j+1] = arr[j+1], arr[j]
}
}
}
}
- 选择排序(Selection Sort)
```func selectionSort(arr []int) {
n := len(arr)
for i := 0; i < n-1; i++ {
min := i
for j := i + 1; j < n; j++ {
if arr[j] < arr[min] {
min = j
}
}
arr[i], arr[min] = arr[min], arr[i]
}
}
- 插入排序(Insertion Sort)
```func insertionSort(arr []int) {
n := len(arr)
for i := 1; i < n; i++ {
key := arr[i]
j := i - 1
for j >= 0 && arr[j] > key {
arr[j+1] = arr[j]
j = j - 1
}
arr[j+1] = key
}
}
4. 快速排序(Quick Sort)
```js
```func quickSort(arr []int, low, high int) {
if low < high {
pivot := partition(arr, low, high)
quickSort(arr, low, pivot-1)
quickSort(arr, pivot+1, high)
}
}
func partition(arr []int, low, high int) int {
pivot := arr[high]
i := low - 1
for j := low; j < high; j++ {
if arr[j] < pivot {
i++
arr[i], arr[j] = arr[j], arr[i]
}
}
arr[i+1], arr[high] = arr[high], arr[i+1]
return i + 1
}
本次学习中,我了解了几种常见的排序算法以及其Go语言实现。这些算法包括冒泡排序、选择排序、插入排序和快速排序。这些算法的实现方法各不相同,但都是为了让我们更有效地处理数据,排序数据。
首先,冒泡排序是最简单的排序算法。它以交换相邻的元素为基础,在n次循环中,每次将最大(或最小)的元素移到数组的末尾,因此需要n-1次循环,每次循环需要比较n-i-1次。尽管冒泡排序算法容易实现,但在处理大型数据集时,其性能会变得很糟糕。
另外一种算法是选择排序。从未排序的元素中找到最小元素,并把它放在数组的开始处,一次类推,每次找到一个最小元素。选择排序是一个不错的,但性能最佳排序算法中并不被广泛使用。
插入排序是另一种常见的排序算法,它通过将未排序的元素插入到已排序的子数组中来排序数组。它的核心思想是将数组分成两个部分:已排序和未排序。只要未被排序的元素大于已排序的元素,我们就向右移动元素。最终,未排序的元素插入排好序的子数组中。
快速排序是一种高效的排序算法,也许是最常用的排序算法之一。它基于“分治”策略。我们选择一个基准元素,然后将小于基准元素的元素移到基准元素的左侧,将大于基准元素的元素移到右侧。在每个部分中,我们继续递归调用排序,直到只有一个元素为止。
总而言之,这些排序算法都是基础的算法,我们可以用其中的任意一种排序算法解决大多数排序问题。当处理数据集较小的时候,我们可以使用冒泡排序、选择排序或插入排序。当处理大量数据时,我们应该使用更快的算法,例如快速排序等。因此,在进行排序算法的选择时,应该考虑到数据集的规模和复杂性,以确定最佳的排序策略。