zoukankan      html  css  js  c++  java
  • 指针和切片方式冒泡排序

    网上形象介绍冒泡排序的过程的资料也很多,其主要思想就是轮排序一定会使得最大的数排到整个数组末尾;

    一共n-1轮外层排序,或者理解为只剩1个数时不需要排序;

    对于第 i 轮外层排序,已经有 i-1 个数排到末尾,此时需要对 n-(i-1) 个数进行排序,但还是只剩1个数不需要排序,因此需要排 n-(i-1)-1=n-i 次;

    这里用2种方式分别实现,一种是用指针对事先安排好的数组排序,一种对在终端输入数组的排序,但本质上都是对数组的引用(因为数组在golang中是值类型),只是切片形式上更灵活;

    • 指针

      package main
      import (
              "fmt"
      )
      
      func bubble(arr *[5]int64) {
              fmt.Println("排序前:",*arr)
              var temp int64
              for i := 0; i < len(*arr)-1; i++ {
                      for j := 0; j < len(*arr)-i-1; j++ {
      	                    // 用指向数组的指针取值写成(*arr)的形式
                              if (*arr)[j] > (*arr)[j+1] {
                                      temp = (*arr)[j]
                                      (*arr)[j] = (*arr)[j+1]
                                      (*arr)[j+1] = temp
                              }
                      }
              }
              fmt.Println("排序后:",*arr)
      }
      func main() {
              arr := [5]int64{55,33,66,22,11}
              bubble(&arr)
      }
      
    • 切片

      package main
      import (
              "fmt"
      )
      
      func bubble(n int) {
              bubbleArr := make([]int, n)
              // 终端输入生成切片
              for i := 0; i < n; i++ {
                      fmt.Printf("请输入第%d个值:
      ",i+1)
                      fmt.Scanln(&bubbleArr[i])
              }
              fmt.Println("排序前:",bubbleArr)
              // 排序
              for j := 1; j < n; j++ {
                      for k := 0; k < n-j; k++ {
                              var temp int
                              if bubbleArr[k] >= bubbleArr[k+1] {
                                      temp = bubbleArr[k]
                                      bubbleArr[k] = bubbleArr[k+1]
                                      bubbleArr[k+1] = temp
                              }
                      }
              }
              fmt.Println("排序后:",bubbleArr)
      }
      func main() {
              var n int
              fmt.Println("请输入数组长度:")
              fmt.Scanln(&n)
              bubble(n)
      }
      
  • 相关阅读:
    德国10马克,高斯正态分布函数
    安装python的第三方库 geopandas
    Python版本的GDAL 安装
    [原创]App崩溃率统计工具推荐
    用户增长模型AARRR模型
    [原创]nginx日志分析工具
    [原创]浅谈移动互联网创业公司工具类产品
    [原创]浅谈在创业公司对PMF的理解
    [原创]浅谈创业公司如何选择产品方向
    [原创]浅谈在创业公司对MVP的理解
  • 原文地址:https://www.cnblogs.com/levin-ling/p/13462430.html
Copyright © 2011-2022 走看看