冒泡排序(bubblesort)

特点:通过换位置的方式,一直向上冒泡

package main

import "fmt"

func bubbleSortAsc(arrayA []int){
for i:=0; i < len(arrayA); i++ {
for j:=0; j < len(arrayA)-1-i; j++ {
if arrayA[j] > arrayA[j+1]{
arrayA[j], arrayA[j+1] = arrayA[j+1], arrayA[j]
}
}
}
fmt.Println(arrayA)
} func bubbleSortDesc(arrayA []int){
for i:=0; i < len(arrayA); i++{
for j:=0; j < len(arrayA)-1-i; j++{
if arrayA[j] < arrayA[j+1]{
arrayA[j], arrayA[j+1] = arrayA[j+1], arrayA[j]
}
}
}
fmt.Println(arrayA)
} func main(){
var arrayA []int = []int{1,3,5,2,9,10,6,4,8,7}
bubbleSortAsc(arrayA)
bubbleSortDesc(arrayA)
}

快速排序(quicksort)

基本思想:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分都要小,然后再按此方法对两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列

复杂度:快速排序是最不稳定的算法,最坏的时间复杂度是O(n2),最好的时间复杂度是 nlogn,空间复杂度是O(logn)

demo:

package main

import "fmt"

func QuickSort(aSlice []int, start, end int) {
if start >= end {
return
} var low, high = start, end //low 为由左向右的游标, high为由右向左的游标
var mid = aSlice[start] // 基数 for low < high {
//如果 low 与 high 未重合,high指向的元素不比基准元素小,则high往左移动
for low < high && aSlice[high] >= mid {
high--
}
aSlice[low] = aSlice[high] //如果 low 与 high 未重合,low指向的元素不比基准元素小,则low往右移动
for low < high && aSlice[low] < mid {
low ++
}
aSlice[high] = aSlice[low]
} //将基准元素放到该位置
aSlice[low] = mid
//对基准元素左边的子序列进行快速排序
QuickSort(aSlice, start, low - 1)
//对基准元素右边的子序列进行快速排序
QuickSort(aSlice, low + 1, end)
} func main (){
var aSlice = []int{2,5,4,6,9,8,10,1,3,7}
QuickSort(aSlice, 0, len(aSlice) - 1)
fmt.Println(aSlice)
}

python 版本:

# coding: utf8

def quick_sort(alist, start, end):
if start >= end:
return # low为由左向右的游标, high为由右向左的游标
low = start
high = end
mid = alist[start] # 基数 while low < high:
# 如果 low 与 high 未重合,high指向的元素不比基准元素小,则high往左移动
while low < high and alist[high] >= mid:
high -= 1
alist[low] = alist[high] # 如果 low 与 high 未重合,low指向的元素不比基准元素小,则low往右移动
while low < high and alist[low] < mid:
low += 1
alist[high] = alist[low] # 将基准元素放到该位置
alist[low] = mid
# 对基准元素左边的子序列进行快速排序
quick_sort(alist, start, low - 1)
# 对基准元素右边的子序列进行快速排序
quick_sort(alist, low + 1, end) if __name__ == '__main__':
# alist = [2, 5, 4, 6, 9, 7, 8, 1, 10, 3]
alist = [6, 5, 8, 2, 9, 4, 10, 1, 3, 7]
quick_sort(alist, 0, len(alist) - 1)
print(alist)

插入排序(insertsort)

像打扑克牌时的抓牌,第一张牌是不需要插入的,第二张牌开始就需要插入了,根据习惯,这里是从右往左看,小的一直往左边挪,一旦确认位置就退出循环(去抓下一张牌)

package main

import "fmt"

func insertSortAsc(arrayA []int){
for i:=1; i < len(arrayA); i++ {
for j:=i; j > 0; j-- {
fmt.Println(arrayA[j])
if arrayA[j-1] > arrayA[j]{
arrayA[j-1], arrayA[j] = arrayA[j], arrayA[j-1]
} else {
break
}
} }
fmt.Println(arrayA)
} func insertSortDesc(arrayA []int){
for i:=1; i < len(arrayA); i++{
for j:=i; j > 0; j--{
if arrayA[j-1] < arrayA[j]{
arrayA[j-1], arrayA[j] = arrayA[j], arrayA[j-1]
} else {
break
}
}
}
fmt.Println(arrayA)
} func main(){
var arrayA []int = []int{3,1,5,2,9,10,6,4,8,7}
insertSortAsc(arrayA)
insertSortDesc(arrayA)
}

  

  

  

最新文章

  1. 看懂mysql执行计划--官方文档
  2. HTML精确定位:scrollLeft,scrollWidth,clientWidth,offsetWidth之完全详解
  3. [LeetCode] Same Tree
  4. POJ 2750 Potted Flower (线段树区间合并)
  5. Eclipse反编译插件JadEclipse 【转】
  6. 128. Longest Consecutive Sequence
  7. Python核心编程--学习笔记--6--序列(上)字符串
  8. [LeetCode]Link List Cycle
  9. 华为oj 统计字符串不同字符
  10. Linux系统基础命令
  11. Elasticsearch head安装
  12. win8 explorer 进程频繁奔溃的原因及处理
  13. 服务器获取浏览器发送请求中的cookies,选取自己需要的cookie
  14. Shell按行读取文件的3种方法
  15. scrapy中的xpath用法和css的用法
  16. PostgreSQL Json字段作为查询条件案例
  17. DDD初探
  18. bwdist matlab
  19. poj2763树链剖分边权+区间和
  20. TZOJ 2722 Matrix(树状数组区间取反单点查询)

热门文章

  1. android: 日期转Unix时间戳,Unix时间戳转日期,带时区
  2. Redis搭建集群
  3. 【转载】 AutoML总结
  4. osg qt ifc
  5. 阶段5 3.微服务项目【学成在线】_day09 课程预览 Eureka Feign_09-课程详情页面静态化-静态页面测试
  6. web手工项目02-注册功能输入分析,处理,输出方法-测试用例及缺陷编写-首页轮播图和购物车
  7. OpenStack Smaug项目简介
  8. hadoop在windows上的配置文件
  9. 建立django项目的完整流程
  10. 如何配置docker仓库