【go】插入排序

在学习go的过程中,正好在看《算法导论》,于是实现了一下插入排序:

   
   
     
     
package main

import (
"fmt"
"rand"
"time"
)

func main () {
arr := Random ( 10 )
array := Copy ( arr )
result := Sort ( array )
fmt . Println ( "arr:\t" , arr )
fmt . Println ( "result:\t" , result )
}

func Sort ( arr [] int32 ) [] int32 {
length := len ( arr )
for i := 1 ; i < length ; i ++ {
key := arr [ i ]
var j int
for j = i - 1 ; j >= 0 && arr [ j ] > key ; j -- {
arr [ j + 1 ] = arr [ j ]
}
arr [ j + 1 ] = key
}
return arr
}

func Copy ( src [] int32 )[] int32 {
length := len ( src )
dest := make ([] int32 , length )
for i := 0 ; i < length ; i ++ {
dest [ i ] = src [ i ]
}
return dest
}

func Random ( length int32 ) [] int32 {
result := make ([] int32 , length )
var i int32 = 0
for i = 0 ; i < length ; i ++ {
rand . Seed ( time . Nanoseconds ())
result [ i ] = rand . Int31n ( 100 )
}
return result
}

在sort中循环中判断终止条件,判断顺序是从左至右的,将 j >=0 && arr[j] > key;两个条件调换顺序会出现index outof range的错误;在打印相关函数中,输出顺序也是从左至右的,可参考上一篇《【go】++/--不是操作符》中的例子。
数组作为函数参数与c语言中类似。传入参数首地址,对整个数组都会进行相应处理。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值