【无标题】

排序算法用golang实现。
冒泡排序
选择排序
插入排序
快速排序
希尔排序

https://blog.csdn.net/qq_36520153/article/details/82886403
package main

import "fmt"

func main() {
   arr := []int{54, 665, 4, 2123, 1, 857, 96, 52, 66, 2345, 687, 31231, 5, 45, 1, 21, 3, 456, 132, 1, 85}
   //GuluguluSort(arr)
   //SelectSort(arr)
   //InsertSort(arr)
   FastSort(0, len(arr)-1,arr)
   fmt.Println(arr)
}

// 冒泡排序。

func GuluguluSort(arr []int) {
   for i := 0; i < len(arr)-1; i++ {
      for j := 0; j < len(arr)-i-1; j++ {
         if arr[j] > arr[j+1] {
            arr[j], arr[j+1] = arr[j+1], arr[j]
         }
      }
   }
}

// 选择排序

func SelectSort(arr []int) {
   for i := 0; i < len(arr)-1; i++ {
      min := arr[i]
      minIndex := i
      for j := i + 1; j < len(arr); j++ {
         if arr[j] < min {
            min = arr[j]
            minIndex = j
         }
      }
      if minIndex != i {
         arr[minIndex], arr[i] = arr[i], arr[minIndex]
      }
   }
}

//插入排序
func InsertSort(arr []int) {
   for i := 1; i < len(arr); i++ {
      insertVal := arr[i]
      insertIndex := i - 1
      for insertIndex >= 0 && arr[insertIndex] > insertVal {
         arr[insertIndex+1 ] = arr[insertIndex]
         insertIndex--
      }
      if insertIndex+1 != i {
         arr[insertIndex+1] = insertVal
      }
   }
}

//快速排序

func FastSort(left, right int, arr []int)  {
   l := left
   r:= right
   local := arr[(left+right)/2]
   for ;l <r;  {
      for ;arr[l]<local; {
         l++
      }
      for ;arr[r]>local ;  {
         r--
      }
      //表示l和r相交,此时l和r的值相等
      if l==r {
         break
      }
      arr[l],arr[r] = arr[r],arr[l]
      if arr[l]==local {
         r--
      }
      if arr[r] == local {
         l++
      }
   }
   if l<=r {
      l++
      r--
   }
   if left < r {
      FastSort(left,r,arr)
   }
   if l<right {
      FastSort(l,right,arr)
   }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值