简单的for循环问题

hrenlo · 2013-07-19 01:01:59 · 4085 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2013-07-19 01:01:59 的主题,其中的信息可能已经有所发展或是发生改变。

// InsertSort project main.go

package main

import (
    "fmt"
    "math/rand"
    "time"
)

func main() {
    var my_slice = make([]int, 0, 100)
    rand.Seed(int64(time.Now().Nanosecond()))
    for i := 0; i < 10; i++ {
        my_slice = append(my_slice, rand.Intn(1001))
    }

    fmt.Println("Before The Insert Sort:")
    fmt.Println(my_slice)
    fmt.Println("Sorting......")
    InsertSort(my_slice)
    fmt.Println("OK! Finish!!!")
    fmt.Println("After The Insert Sort:")
    fmt.Println(my_slice)
}

func InsertSort(slice_arg []int) {
    var tmpVar int
    for j := 1; j < len(slice_arg); j++ {
        tmpVar = slice_arg[j]
        i := j - 1
        //for tmpVar < slice_arg[i] {
        //  slice_arg[i+1] = slice_arg[i]
        //  i--
        //  if i == -1 {
        //      break
        //  }
        //}
        //for i >= 0 {
        //  if tmpVar < slice_arg[i] {
        //      slice_arg[i+1] = slice_arg[i]
        //  } else {
        //      break
        //  }
        //  i--
        //}
        for tmpVar < slice_arg[i] && i >= 0 {                       //这里怎么就不行呢
            slice_arg[i+1] = slice_arg[i]
            i--
        }
        slice_arg[i+1] = tmpVar
        fmt.Println(slice_arg)
    }
}

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

4085 次点击  
加入收藏 微博
2 回复  |  直到 2013-07-19 02:43:48
polaris
polaris · #1 · 12年之前

改为:

i >= 0 && tmpVar < slice_arg[i]

就可以了。

一开始,i=0,进入循环,然后i--,i=-1了,slice_arg[-1] 当然会报错。

hrenlo
hrenlo · #2 · 12年之前
polarispolaris #1 回复

改为: `i >= 0 && tmpVar < slice_arg[i] ` 就可以了。 一开始,i=0,进入循环,然后i--,i=-1了,slice_arg[-1] 当然会报错。

谢谢啊,可以了

添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传