Go实现常用的排序算法
一、插入排序
1.从第一个元素开始,该元素可以认为已经被排序
2.取出下一个元素,在已经排序的元素序列中从后向前扫描
3.如果该元素(已排序)大于新元素,将该元素移到下一位置
4.重复步骤3,直到找到已排序的元素小于或者等于新元素的位置
5.将新元素插入到该位置后
点击查看代码
// 插入排序
func insertsort(arr []int) []int {
//循环多少次,需要插入n-1个,从第二个开始插
for i:=1; i<len(arr) ; i++ {
num := arr[i]
//j是已经排好需要,为什么是i-1,因为需要在已经排好的数据里面插入,要找到插入的位置
j:=i-1
//内嵌循环,如果比需要插入数据大就先往后排。
for j>=0&&arr[j]>num {
arr[j+1] = arr[j]
j--
}
//插入
arr[j+1] = num
}
return arr
}
二、冒泡排序
1.比较相邻的元素,如果第一个比第二个大,就交换他们两个
2.对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对,这步做完后,最后的元素会是最大的数。
3.核心就是需要冒泡n-1次,因为每次冒泡筛出一个最大值。
点击查看代码
func bubbleSort(arr []int) []int {
//外嵌套循环次数为n-1
n := len(arr)
for i:=0;i<n-1;i++{
//内嵌循环,进行两两对比,对比n-1-i次,因为
for j:=0 ; j<n-1-i;j++ {
if arr[j]>arr[j+1]{
//交换位置
arr[j],arr[j+1] = arr[j+1], arr[j]
}
}
}
}
三。快速排序
1.不需要排的条件是数组为【】或者只有一个元素,这叫做基线条件。
2.选择一个基准元素provit,作为对数组分区的基准
3.将数组进行分区,比provit大的在right组,小的在left组
4.分治思想对左和右数组进行快速排序。
点击查看代码
func QuickSort(arr []int) []int {
//基线条件
n:=len(arr)
if n<2 {
return arr
}
//基准元素
provit := arr[0]
//分区
var left, right []int
for _,v := range arr[1:] {
if v <=provit {
left=append(left,v)
}else {
right = append(right, v)
}
}
//快速排序
left = QuickSort(left)
right =QuickSort(right)
return append(append(left,provit),right...)
}
Go实现常用的排序算法的更多相关文章
- JavaScript实现常用的排序算法
▓▓▓▓▓▓ 大致介绍 由于最近要考试复习,所以学习js的时间少了 -_-||,考试完还会继续的努力学习,这次用原生的JavaScript实现以前学习的常用的排序算法,有冒泡排序.快速排序.直接插入排 ...
- 常用Java排序算法
常用Java排序算法 冒泡排序 .选择排序.快速排序 package com.javaee.corejava; public class DataSort { public DataSort() { ...
- java SE 常用的排序算法
java程序员会用到的经典排序算法实现 常用的排序算法(以下代码包含的)有以下五类: A.插入排序(直接插入排序.希尔排序) B.交换排序(冒泡排序.快速排序) C.选择排序(直接选择排序.堆排序) ...
- C#中常用的排序算法的时间复杂度和空间复杂度
常用的排序算法的时间复杂度和空间复杂度 常用的排序算法的时间复杂度和空间复杂度 排序法 最差时间分析 平均时间复杂度 稳定度 空间复杂度 冒泡排序 O(n2) O(n2) 稳定 O(1) 快速排序 ...
- 数据结构中常用的排序算法 && 时间复杂度 && 空间复杂度
第一部分:数据结构中常用的排序算法 数据结构中的排序算法一般包括冒泡排序.选择排序.插入排序.归并排序和 快速排序, 当然还有很多其他的排序方式,这里主要介绍这五种排序方式. 排序是数据结构中的主要内 ...
- 常用的排序算法介绍和在JAVA的实现(二)
一.写随笔的原因:本文接上次的常用的排序算法介绍和在JAVA的实现(一) 二.具体的内容: 3.交换排序 交换排序:通过交换元素之间的位置来实现排序. 交换排序又可细分为:冒泡排序,快速排序 (1)冒 ...
- 排序总结---常用的排序算法总结,java和js实现
这篇博客对几种常见的排序算法进行归纳总结,在接下来的博客中会依次给出每个排序算法的例子 [由于博客上面进行编辑不太方便,图表都是在电脑上编辑好,上传的图片] 1.排序的分类 2.几种内部排序方法的比较 ...
- 常用的排序算法介绍和在JAVA的实现(一)
一.写随笔的原因:排序比较常用,借此文介绍下排序常用的算法及实现,借此来MARK一下,方便以后的复习.(本人总是忘得比较快) 二.具体的内容: 1.插入排序 插入排序:在前面已经排好序的序列中找到合适 ...
- 五种C语言非数值计算的常用经典排序算法
摘要:排序是计算机的一种操作方法,其目的是将一组"无序"的记录序列调整为"有序"的记录序列,主要分为内部排序和外部排序. 排序 排序是计算机的一种操作方法,其目 ...
- C语言几种常用的排序算法
/* ============================================================================= 相关知识介绍(所有定义只为帮助读者理解 ...
随机推荐
- Python代码学习
1.生成四位数字字母验证码,大小写字母随机 import random if __name__ =="__main__": #四位数字字母验证码的生成 checkcode=&quo ...
- C++中的引用(Reference)
1. 引用(Reference) 在 C++ 中,引用(Reference)是一个变量的别名. 它允许你通过不同的名字访问同一个变量. 与指针不同,引用在定义时必须被初始化,并且一旦绑定到某个变量,之 ...
- Spring Cloud微服务下如何配置I8n
什么是I8n 国际化(I18n)指的是设计和开发产品的过程,使得它们能够适应多种语言和文化环境,而不需要进行大量的代码更改.这通常涉及到创建一个基础版本的产品,然后通过配置和资源文件来添加对不同语言和 ...
- JavaScript系列:JS实现复制粘贴文字以及图片
目录 一. 基于 Clipboard API 复制文字(推荐) 基本概念 主要方法 使用限制 实际应用示例 二.基于 document.execCommand('copy') 缺陷 实际应用示例 说明 ...
- TP5 连接多个数据库
use think\Config; $config = Config::get('database2'); //读取第二个数据库配置 $connect = Db::connect($config); ...
- tp5.1--数据库事务操作
https://blog.csdn.net/qq_42176520/article/details/88708395 使用事务处理的话,需要数据库引擎支持事务处理.比如 MySQL 的 MyISAM ...
- [oeasy]python019_ 如何在github仓库中进入目录_找到程序代码_找到代码
继续运行 回忆上次内容 上上次 真写了万行代码 这 万行代码 都是写在明面上的 这次 使用git命令 下载了 github上面的仓库 添加图片注释,不超过 140 字(可选) 下载仓库 ...
- [rCore学习笔记 05]第0章作业题
作业1 略. 作业2 C语言程序 gcc编译 gcc -o main main.c 编译报错 成功产生异常 main.c: In function 'main': main.c:5:26: warni ...
- java面试一日一题:讲下ThreadLocal
问题:请讲下ThreadLocal 分析:首先要了解ThreadLocal的基本原理:其次要理解ThreadLocal发生内存泄漏的原因:最后ThreadLocal是如何做到线程隔离的 回答要点: 主 ...
- Jmeter参数化2-读取文件
如果你想要jmeter批量生成 指定 的参数值数据,可以使用导入文件参数化方法来实现 下面讲述两种jmeter读取文件参数值方法:"CSV 数据文件设置"."函数助手&q ...