冒泡排序、选择排序、插入排序、快速排序基于golang的实现

一、冒泡排序
算法原理:
比较相邻的元素。如果第一个比第二个大,就交换他们两个。
对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
针对所有的元素重复以上的步骤,除了最后一个。
持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
代码:

  /**
   *传入一个切片,对切片中的数字进行排序交换
   */
      func  Bubblesort([] int arr)([] int result){
         for i:=0;i<len(arr);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]
                      }
            }
       }
        return 
      }

二、选择排序
算法原理:每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到全部待排序的数据元素排完。 选择排序是不稳定的排序方法。
核心代码:

func Selectsort(arr[]int)(result[] int){
        len:=len(arr)
         for i:=0;i<len;i++{
                  minIndex:=i
                  for j:=i+1;j<len;j++{
                         if arr[minIndex]>arr[j]{
                              minIndex=j
                       }
                     }
                if minIndex!=i{
                       arr[minIndex],arr[i]=arr[i],arr[minIndex]
                  }
      }
                result=arr
                return
 }

代码运行展示:
在这里插入图片描述
三 插入排序
算法原理:从第二个数开始向右侧遍历,每次均把该位置的元素移动至左侧,放在放在一个正确的位置(比左侧大,比右侧小)。
核心代码:

 func Insertsort(arr []int) (result [] int){
   len:=len(arr)
   for i:=0;i<len;i++{
            for j:=i;j>0;j--{
                       if a[j]>a[j-1]{
                         break
                      }
                      //交换元素
                      a[j],a[j-1]=a[j-1],a[j]
           }
  }
   result=arr
   return
}

代码运行展示
在这里插入图片描述
四、快速排序
算法原理:
通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
核心代码:

func Quiscksort(arr []int,left int,right int) {
	  if left>=right{
	  	  return
	  }
	  val:=arr[left]
	  k:=left
	  //遍历剩余的数,确保所有的值左边的数比val大,右边的数比val小
	  for i:=left+1;i<=right;i++{
          if arr[i]<val{
          	arr[k]=arr[i]
          	arr[i]=arr[k+1]
          	k++
		  }
	  }
	  arr[k]=val    
	Quiscksort(arr,left,k-1)
	Quiscksort(arr,k+1,right)
}

调用:

   var arr=[]int{3,2,12,1,6,3,34,15}
	Quiscksort(arr,0,len(arr)-1)
	fmt.Println("排序结果:",arr)

运行展示:
在这里插入图片描述

发布了77 篇原创文章 · 获赞 2 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/u014265398/article/details/90207255