go算法入门: 数组的排序

题目:

对数组的元素进行正序(从小到大)和倒序(从大到小)的排列

只使用 比较符号 ( > , < ) 和条件判断 和 循环语句,对一个数组进行排序。

可以多次定义变量,但是不能定义多个方法(所有代码都写在一个 (大部分)或者2个方法中)

不能使用 [1,2,3,5,8].sort 这样的方法

例如:

my_sort([4,8,9,1,2,5] ) # => [1,2,4,5,8,9]

正序(从小到大排序)带日志:

package main
import "fmt"
//创建一个新函数,函数参数名称为array, 类型为整数数组,返回类型为整数数组
//想要把数组从小到大排序
func number(arr []int) []int {
//第一层for循环,i是数组元素的下标, i遍历数组
  for i := 0; i<len(arr); i++{
    fmt.Println("i", i)
//第二层for循环,i给j定了给范围,在这个范围内大于0
//for循环里面,求正序,如果j-1大于j,则j向前(数组的左边)移动一位,直到j=0,停止j循环,然后i+1
    for j := i; j > 0 && arr[j-1] > arr[j]; j--{
      fmt.Println("换位置之前arr:", arr ,"arr[j]:", j, "[j-1]:", j-1)
      arr[j], arr[j-1] = arr[j-1], arr[j]
      fmt.Println("换位置之后arr:", arr,"arr[j]:", j, "arr[j-1]:", j-1)
    }
  }
    return arr
}
func main() {
  fmt.Println(number([]int{2,6,4,1,7,3}))
}

结果:

i 0
i 1
i 2
换位置之前arr: [2 6 4 1 7 3] arr[j]: 2 [j-1]: 1
换位置之后arr: [2 4 6 1 7 3] arr[j]: 2 arr[j-1]: 1
i 3
换位置之前arr: [2 4 6 1 7 3] arr[j]: 3 [j-1]: 2
换位置之后arr: [2 4 1 6 7 3] arr[j]: 3 arr[j-1]: 2
换位置之前arr: [2 4 1 6 7 3] arr[j]: 2 [j-1]: 1
换位置之后arr: [2 1 4 6 7 3] arr[j]: 2 arr[j-1]: 1
换位置之前arr: [2 1 4 6 7 3] arr[j]: 1 [j-1]: 0
换位置之后arr: [1 2 4 6 7 3] arr[j]: 1 arr[j-1]: 0
i 4
i 5
换位置之前arr: [1 2 4 6 7 3] arr[j]: 5 [j-1]: 4
换位置之后arr: [1 2 4 6 3 7] arr[j]: 5 arr[j-1]: 4
换位置之前arr: [1 2 4 6 3 7] arr[j]: 4 [j-1]: 3
换位置之后arr: [1 2 4 3 6 7] arr[j]: 4 arr[j-1]: 3
换位置之前arr: [1 2 4 3 6 7] arr[j]: 3 [j-1]: 2
换位置之后arr: [1 2 3 4 6 7] arr[j]: 3 arr[j-1]: 2
[1 2 3 4 6 7]

倒序(从大到小排序)带日志:

package main
import "fmt"
//想要把数组从大到小排序
func insertionSort (arr []int) []int {
//第一层for循环,i是数组下标,i遍历数组
  for i := 0; i<len(arr); i++{
    fmt.Println("i:", i)
//第二层for循环,求倒序,如果j-1小于j,则j向后(数组里面向右)移动一位,直到j=0,停止j循环,然后i+1
    for j := i; j>0 && arr[j-1] < arr[j]; j--{
      fmt.Println("换位置之前arr:", arr ,"arr[j]:", j, "[j-1]:", j-1)
      arr[j], arr[j-1] = arr[j-1], arr[j]
      fmt.Println("换位置之后arr:", arr,"arr[j]:", j, "arr[j-1]:", j-1)
    }
  }
  return arr  
}
func main() {
  fmt.Println(insertionSort([]int {2,6,4,1,7,3}))
}

结果:

i: 0
i: 1
换位置之前arr: [2 6 4 1 7 3] arr[j]: 1 [j-1]: 0
换位置之后arr: [6 2 4 1 7 3] arr[j]: 1 arr[j-1]: 0
i: 2
换位置之前arr: [6 2 4 1 7 3] arr[j]: 2 [j-1]: 1
换位置之后arr: [6 4 2 1 7 3] arr[j]: 2 arr[j-1]: 1
i: 3
i: 4
换位置之前arr: [6 4 2 1 7 3] arr[j]: 4 [j-1]: 3
换位置之后arr: [6 4 2 7 1 3] arr[j]: 4 arr[j-1]: 3
换位置之前arr: [6 4 2 7 1 3] arr[j]: 3 [j-1]: 2
换位置之后arr: [6 4 7 2 1 3] arr[j]: 3 arr[j-1]: 2
换位置之前arr: [6 4 7 2 1 3] arr[j]: 2 [j-1]: 1
换位置之后arr: [6 7 4 2 1 3] arr[j]: 2 arr[j-1]: 1
换位置之前arr: [6 7 4 2 1 3] arr[j]: 1 [j-1]: 0
换位置之后arr: [7 6 4 2 1 3] arr[j]: 1 arr[j-1]: 0
i: 5
换位置之前arr: [7 6 4 2 1 3] arr[j]: 5 [j-1]: 4
换位置之后arr: [7 6 4 2 3 1] arr[j]: 5 arr[j-1]: 4
换位置之前arr: [7 6 4 2 3 1] arr[j]: 4 [j-1]: 3
换位置之后arr: [7 6 4 3 2 1] arr[j]: 4 arr[j-1]: 3
[7 6 4 3 2 1]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值