排序算法.png

排序算法总结.svg

最近在寻找画思维导图的软件,印象笔记中的思维导图比较符合我的需求,但我不知道怎么导出为图片(我想到的一种方法是导进语雀,这样自动就转化成图片了,不过这种方法比较麻烦,可以尝试调用语雀对印象笔记的 API 将 HTML 格式转为 PNG 格式),上面那个是 XMind 画出来的思维导图,XMind 是一个付费软件,内含有多种模板和功能,但有一种杀鸡用牛刀的意思。下面的是用 GitMind 画的思维导图,GitMind 是一款免费开源的在线思维导图软件,界面简洁、操作简单,支持Web云端保存,新建的脑图会自动保存至云端,可以随时登陆账户查看编辑、不用担心脑图文件发生丢失。简介好用,确认过眼神,是我喜欢的类型。

Bubble

核心思想

就像它的名字一样,冒泡排序,小的上浮,大的下沉。

代码实现

  1. package main
  2. import (
  3. "fmt"
  4. "github.com/zhangce1999/gods/utils"
  5. )
  6. func main() {
  7. arr := utils.RandArray(10)
  8. fmt.Println("Initial array is:", arr)
  9. fmt.Println("")
  10. for i := 0; i < len(arr); i++ {
  11. for j := 0; j < len(arr)-1-i; j++ {
  12. if arr[j] > arr[j+1] {
  13. arr[j], arr[j+1] = arr[j+1], arr[j]
  14. }
  15. }
  16. }
  17. fmt.Println("Sorted array is: ", arr)
  18. }

快速排序

核心思想

选择一个基本数(一般选第一个),大的放在左边,小的放在右边,然后对左边和右边的数字重复上面的操作,这是一个递归的过程。

代码实现

  1. package main
  2. import (
  3. "fmt"
  4. "github.com/zhangce1999/gods/utils"
  5. )
  6. // QKSort represents the quick sort
  7. func QKSort(arr []int, L, P int) {
  8. if len(arr) <= 1 {
  9. return
  10. }
  11. x := arr[L]
  12. i, j := L, P
  13. for i != j {
  14. for arr[j] > x {
  15. j--
  16. }
  17. if i < j {
  18. arr[i] = arr[j]
  19. i++
  20. for arr[i] <= x && i < j {
  21. i++
  22. }
  23. if i < j {
  24. arr[j] = arr[i]
  25. j--
  26. }
  27. }
  28. }
  29. arr[i] = x
  30. i++
  31. j--
  32. if L < j {
  33. QKSort(arr, L, j)
  34. }
  35. if i < P {
  36. QKSort(arr, i, P)
  37. }
  38. }
  39. func main() {
  40. arr := utils.RandArray(10)
  41. fmt.Println("Initial array is:", arr)
  42. QKSort(arr, 0, 9)
  43. fmt.Println(arr)
  44. fmt.Println("Sorted array is: ", arr)
  45. }

嗨呀,这个排序算法实现的有问题,只有部分情况适用,可能是因为递归没有退出,正在修改程序。