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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2017-12-17 17:29  pyrene  阅读(253)  评论(0编辑  收藏  举报