• 五、golang实现排序


    实现排序:

    1、实现一个冒泡排序

    2、实现一个选择排序

    3、实现一个插入排序

    4、实现一个快速排序

    冒泡排序

    package main
    
    import(
       "fmt"
    )
    
    func bsort(a [] int){
       for i :=0;i<len(a);i++{
          for j:=1;j<len(a)-i;j++{
             if a[j]<a[j-1]{
                a[j],a[j-1]=a[j-1],a[j]
             }
          }
       }
    }
    
    func main() {
       b := [...]int{8, 7, 5, 4, 3, 10, 15}
       bsort(b[:])
       fmt.Println(b)
    }
    View Code

    选择排序

    每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完

    package main
    
    import (
       "fmt"
    )
    
    func ssort(a [] int){
    
       for i:=0;i<len(a);i++{
          for j:=i+1;j<len(a);j++{
             if a[i]<a[j]{
                a[i],a[j]=a[j],a[i]
             }
          }
       }
    }
    
    func main(){
       b:=[...]int{8,7,5,4,3,10,15}
       ssort(b[:])
       fmt.Println(b)  //[15 10 8 7 5 4 3]
    }
    方法一
    package main
    
    import (
       "fmt"
    )
    
    
    func ssort(a [] int){
    
       for i:=0;i<len(a);i++{
          var min int=i
          for j:=i+1;j<len(a);j++{
             if a[min]>a[j]{
                min=j
                }
             }
             a[i],a[min]=a[min],a[i]
          }
       }
    
    func main(){
       b:=[...]int{8,7,5,4,3,10,15}
       ssort(b[:])
       fmt.Println(b)  //[15 10 8 7 5 4 3]
    }
    方法二

    插入排序

    原理:选择第一个数,然后把后面的数和第一个数进行比较,然后如果小于第一个数的话那么就插入到第一个数前面,如果大于第一个数就插入到第一个数后面,
    主要两个for循环,然后第一个for循环要从1开始,第二个for循环因为要和第一个序列进行比较所以要等于i,所以后面的数要大于0,并且要减减的方式
    package main
    
    import (
       "fmt"
    )
    
    func isort(a[]int){
       for i:=1;i<len(a);i++{
          for j:=i;j>0;j--{
             if a[j]>a[j-1]{
                break
             }
             a[j],a[j-1]=a[j-1],a[j]
          }
       }
    }
    
    func main(){
       b:=[...]int{8,7,5,4,3,10,15}
       isort(b[:])
       fmt.Println(b)
    }
    View Code

    快速排序

    原理:对于无序的序列,把他们划分为左边和右边两个序列,然后进行排序

    首先要确定选择的值排序之后的位置,然后递归计算,退出条件是左边的下标大于或者等于右边减去1的下标

    package main
    
    import(
       "fmt"
    )
    
    func qsort(a []int,left,right int){
       if left>=right{  //如果左边大于等于右边减去1的值,就退出
          return
       }
    
       val :=a[left]
       k:=left
       //确定val所在的位置,这个就是确定val排序之后所在的位置
       for i:=left+1;i<=right;i++{
          if a[i]<val{
             a[k]=a[i]
             a[i]=a[k+1]
             k++
          }
       }
       //这个是确定val所对应的在数组中的位置
       a[k]=val
       //下面是分别递归排序左边和右边
       qsort(a,left,k-1)
       qsort(a,k+1,right)
    }
    
    func main(){
       b:=[...]int{8,7,5,4,3,10,15}
       qsort(b[:],0,len(b)-1)
       fmt.Print(b)
    }
    View Code

     

  • 相关阅读:
    .Net 中double相加的困惑
    关于内存资源消耗快的问题
    内存资源消耗快的问题
    跨线程更新窗体
    .Net实现双缓冲
    TypeConverter
    emf文件的导入
    在资源中存放图象与emf文件的显示
    笔记java中nextLine方法没有输入就跳过了
    Silverlight Triggers、Actions 和 Behaviors
  • 原文地址:https://www.cnblogs.com/pyrene/p/8052679.html
Copyright © 2020-2023  润新知