五、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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

转载于:https://www.cnblogs.com/pyrene/p/8052679.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值