利用rand函数进行随机输出,代码如下: @H_404_11@
package mainimport "fmt"import "math/rand"import "time"//确定一个切片是否是从大到小排列的,如果是返回“真”,不是则返回“假”。func isOrdered(List []int) bool { for i := 1; i < len(List); i++ { if List[i-1] > List[i] { //如果存在前一个元素大于后一个,则返回“假” return false } } return true}//让切片中的元素随机排列func randList(List []int) { duplicateList := make([]int,len(List)) copy(duplicateList,List) //用copy函数进行切片复制,这样下面修改源切片(List)才不会影响到切片副本(duplicateList) rand.Seed(time.Now().UnixNano()) //使用当前的UNIX时间作为种子,不同的种子才能生成不同的随机值 index := rand.Perm(len(List)) //使用rand.Perm(n)函数生成一个[0:n)的随机切片,并按照随机切片中的元素顺序对源切片进行排序 for i,k := range index { List[i] = duplicateList[k] }}func main() { List := []int{1,4,3,6,9,7,2,8,5,0} count := 0 for { if isOrdered(List) { fmt.Printf("\t排序完成!\n\t已排序%v次。\n\t排序结果为 %v\n",count,List) break } else { randList(List) count++ } }}@H_404_11@实现方法(二)
利用map每次的输出为随机值进行排序(实际发现这种方法不靠谱,其中几个结果的出现频率特别高,经常重复,等了很久也不能输出正确结果)
代码如下:
package mainimport ( "fmt")//将一个切片转换为map,其中切片的元素的值为map的key,map的value统一为0func List2map(List []int) map[int]int { m := make(map[int]int) for _,v := range List { m[v] = 0 } return m}//将map的key输出为切片,map的输出是无序的,所以每次的输出都应该是随机的。func map2List(m map[int]int) []int { List := []int{} for i := range m { List = append(List,i) } return List}//确定一个切片是否是从大到小排列的,如果是返回“真”,不是则返回“假”。func isOrdered(List []int) bool { for i := 1; i < len(List); i++ { if List[i-1] > List[i] { //如果存在前一个元素大于后一个,则返回“假” return false } } return true}func main() { List := []int{3,1} m := List2map(List) count := 0 for { if isOrdered(List) { fmt.Printf("\t排序完成!\n\t已排序%v次。\n\t排序结果为 %v\n",List) break } else { List = map2List(m) fmt.Println(List) count++ } }}总结
以上是内存溢出为你收集整理的使用GOLANG实现猴子排序全部内容,希望文章能够帮你解决使用GOLANG实现猴子排序所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)