选择排序、冒泡排序、插入排序、快速排序

在工作中,常用的“选择排序”、“冒泡排序”、“插入排序”、“快速排序”这四种排序方式。
我试着用go语言编写一下这四种方式的实现。

假设我们有一个数组{3,2,5,1,4},从小到大排列

1.选择排序

实现

遍历数组,每次找出最小的元素即可。

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

func main(){
    a:=[5]int{3,2,5,1,4}
    sliceb:=a[:]
    csort(sliceb)
    fmt.Println(a)
}

推演思路

遍历 i=0时


选择排序、冒泡排序、插入排序、快速排序_第1张图片
image.png

选择初最小的数填充a[0]-第一个元素。交换a[0],a[3]
遍历i=1时


选择排序、冒泡排序、插入排序、快速排序_第2张图片
image.png

i=2时
选择排序、冒泡排序、插入排序、快速排序_第3张图片
image.png

i=3时


选择排序、冒泡排序、插入排序、快速排序_第4张图片
image.png

完成。

2.冒泡排序

实现

冒泡排序方式跟下一个相比较,比较的向后移动。第一次循环便利到最后,第二次遍历到len(a)-i(最后一个已经时最大的,没必要比较了)

func bsort(a []int){
        for i:=0;ia[j+1]{
                      a[j],a[j+1]=a[j+1],a[j]
                  }
              }
        }
}
func main(){
    a:=[5]int{3,2,5,1,4}
    sliceb:=a[:]
    bsort(sliceb)
    fmt.Println(a)
}

推演思路

i=0


选择排序、冒泡排序、插入排序、快速排序_第5张图片
image.png

i=1


image.png

i=2
选择排序、冒泡排序、插入排序、快速排序_第6张图片
image.png

i=3


image.png

3.插入排序

实现

快速排序法是在遍历数组时,先找前两位进行比较,根据最外层的循环逐渐扩大比对范围。

//插入排序
func isort(a []int){
        for i:=0;i=0;j--{
                if a[j]>a[j++]{
                  a[j],a[j+1]=a[j+1],a[j]
                }
            }
        }
}
func main(){
    a:=[5]int{3,2,5,1,4}
    sliceb:=a[:]
    jsort(sliceb)
    fmt.Println(a)
}

思路推演

i=0


选择排序、冒泡排序、插入排序、快速排序_第7张图片
image.png

i=1


选择排序、冒泡排序、插入排序、快速排序_第8张图片
image.png

i=2


选择排序、冒泡排序、插入排序、快速排序_第9张图片
image.png

i=3


选择排序、冒泡排序、插入排序、快速排序_第10张图片
image.png

4.快速排序

实现

快速排序法主题思想是递归,也就是利用通用的方法进行递归排序。
首先需要选出一个数作为比较的对象,我们姑且称之为比较数。
然后遍历数组,将比这个数小的放在数的左边,比这个数大的放在比较数的右边。
这样就分为左右两部分,我们将左右两边继续选择出一个数作为比较对象,重复先前的比对工作,直至边界(被分割数组长度小于1)
递归的边界我们姑且定位开始(left)结束(right),比较对象姑且定为第一个元素。

func qsort(a []int,left,right int){
      if left>=right{
          return
      }

      val:=a[left]
      k:=left
      for i:=left;i

思路推演

根据第一个外层思路解释
i=0


选择排序、冒泡排序、插入排序、快速排序_第11张图片
image.png

i=1


i=2


选择排序、冒泡排序、插入排序、快速排序_第12张图片
image.png

i=3


image.png

下一层递归 qsort(a []int ,0,1) qsort(a []int ,3,4)

基本介绍完了。原创不易,还请多多点赞谢谢。

你可能感兴趣的:(选择排序、冒泡排序、插入排序、快速排序)