转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6594533.html 

一:插入排序==逐个往前相邻数比较交换,小的在前

第一轮:A[1]与A[0]比较,小的在前面;

第二轮:A[2]~A[0]相邻数比较,小的交换到前面,直到合适位置;

...

第n-1轮:A[n-1]往前比较,小则交换到前面,继续比较交换直到合适位置。

复杂度计算:T=1+2+...(n-1)=(n-1)(n-2)/2=O(n^2)

public int[] insertionSort(int[] A, int n) {
for(int i=0;i<n-1;++i){//i标记有序序列最后位置
for(int j=i+1;j>0;--j){//j为待插入元素
if(A[j]<A[j-1]){//从j开始不断与自己的前面元素比较交换
int temp;
temp=A[j-1];
A[j-1]=A[j];
A[j]=temp;
}
}
}
return A;
}

二:冒泡排序==相邻数比较交换,大者放在后面,每一次把当前轮最大者交换到末尾

排序开始:从0到n-1,进行相邻数比较交换操作,大者放在后面

第二轮:从0到n-1,进行相邻数比较交换操作,大者放在后面

......

第n-1轮:比较a[0]和a[1],大者放后面。此时整个数组有序。

复杂度计算:T=n+(n-1)+...+1=n(n-1)/2=O(n^2)

public class BubbleSort {
public int[] bubbleSort(int[] A, int n) { while(n>=1){//n控制当前是第几轮
for(int i=0;i<n-1;++i){//i负责当前轮的比较交换。注意这里是<n-1。而不是<=n-1。因为下面是i与i+1比较,如果遍历到n-1的话i+1就越界了
if(A[i]>A[i+1]){//比较,交换,让相邻两者大的在后面
int temp;
temp=A[i];
A[i]=A[i+1];
A[i+1]=temp;
}
}
--n;//当前轮结束,缩小范围
}
return A;
}
}

三:选择排序==每次选择待排序列最小者交换到待排序列的最前方

排序开始:从0到n-1遍历,选出最小者,交换到0位置;

第二轮:从1到n-1遍历,选择出最小者,交换到1位置;

...

第n-1轮:从n-2到n-1之间,选择最小者,放到n-2处。此时,0~n-1有序。

复杂度计算:T=n+(n-1)+...+1=n(n-1)/2=O(n^2)

public int[] selectionSort(int[] A, int n) {

        for(int i=0;i<=n-1;++i){//当前轮待排序的开始位置
int min=i;//记录待排序列最小值下标
for(int j=i;j<=n-1;++j){
if(A[min]>A[j]){
min=j;//选择最小值下标
}
}
if(min!=i){//如果待排序列开头不是最小值,则交换
int temp;
temp=A[i];
A[i]=A[min];
A[min]=temp;
}
}
return A;
}

总结:三个O(n^2)的排序算法,插入、冒泡都是相邻元素比较交换达到合适位置的,选择则每次选出最小者交换到开头

排序基础之插入排序、冒泡排序、选择排序详解与Java代码实现的更多相关文章

  1. C# 插入排序 冒泡排序 选择排序 高速排序 堆排序 归并排序 基数排序 希尔排序

    C# 插入排序 冒泡排序 选择排序 高速排序 堆排序 归并排序 基数排序 希尔排序 以下列出了数据结构与算法的八种基本排序:插入排序 冒泡排序 选择排序 高速排序 堆排序 归并排序 基数排序 希尔排序 ...

  2. 算法 排序lowB三人组 冒泡排序 选择排序 插入排序

    参考博客:基于python的七种经典排序算法   [经典排序算法][集锦]     经典排序算法及python实现 首先明确,算法的实质 是 列表排序.具体就是操作的列表,将无序列表变成有序列表! 一 ...

  3. 【排序基础】1、选择排序法 - Selection Sort

    文章目录 选择排序法 - Selection Sort 为什么要学习O(n^2)的排序算法? 选择排序算法思想 操作:选择排序代码实现 选择排序法 - Selection Sort 简单记录-bobo ...

  4. 排序算法详解(java代码实现)

    ​ 排序算法大致分为内部排序和外部排序两种 内部排序:待排序的记录全部放到内存中进行排序,时间复杂度也就等于比较的次数 外部排序:数据量很大,内存无法容纳,需要对外存进行访问再排序,把若干段数据一次读 ...

  5. 斐波那契堆(Fibonacci heap)原理详解(附java代码实现)

    前言 斐波那契堆(Fibonacci heap)是计算机科学中最小堆有序树的集合.它和二项式堆有类似的性质,但比二项式堆有更好的均摊时间.堆的名字来源于斐波那契数,它常用于分析运行时间. 堆结构介绍 ...

  6. JavaScript 数据结构与算法之美 - 冒泡排序、插入排序、选择排序

    1. 前言 算法为王. 想学好前端,先练好内功,只有内功深厚者,前端之路才会走得更远. 笔者写的 JavaScript 数据结构与算法之美 系列用的语言是 JavaScript ,旨在入门数据结构与算 ...

  7. 学习C#之旅 冒泡排序,选择排序,插入排序,希尔排序[资料收集]

    关于冒泡排序,选择排序,插入排序,希尔排序[资料收集]  以下资料来源与网络 冒泡排序:从后到前(或者从前到后)相邻的两个两两进行比较,不满足要求就位置进行交换,一轮下来选择出一个最小(或最大)的放到 ...

  8. Python实现八大排序(基数排序、归并排序、堆排序、简单选择排序、直接插入排序、希尔排序、快速排序、冒泡排序)

    目录 八大排序 基数排序 归并排序 堆排序 简单选择排序 直接插入排序 希尔排序 快速排序 冒泡排序 时间测试 八大排序 大概了解了一下八大排序,发现排序方法的难易程度相差很多,相应的,他们计算同一列 ...

  9. python算法(一)基本知识&冒泡排序&选择排序&插入排序

    本节内容: 算法基本知识 冒泡排序 选择排序 插入排序 1. 算法基本知识 1.1 什么是算法? 算法(algorithm):就是定义良好的计算过程,他取一个或一组的值为输入,并产生出一个或一组值作为 ...

随机推荐

  1. client缓存机制

    一.简单介绍 client缓存机制不仅能够减轻server端的压力,同一时候也能让用户在网速较慢的情况下获取良好的用户体验. 所以构建一个优秀的APP,缓存是非常重要的一个环节. 二.处理方案 cli ...

  2. QML与C++交互:在qml中使用QSqlQueryModel显示数据库数据

    QML与C++交互:在qml中使用QSqlQueryModel显示数据库数据 本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明. 參考链接: http:// ...

  3. 详解Java多线程编程中LockSupport类的线程阻塞用法

    LockSupport类是Java6(JSR166-JUC)引入的一个类,提供了基本的线程同步原语.LockSupport实际上是调用了Unsafe类里的函数,归结到Unsafe里,只有两个函数: p ...

  4. 在SQLite中使用事务

    使用SQLiteDatabase的beginTransaction()方法可以开启一个事务,程序执行到endTransaction() 方法时会检查事务的标志是否为成功,如果为成功则提交事务,否则回滚 ...

  5. 解读SSD中的Default box(Prior Box)

    1:SSD更具体的框架如下: 2: Prior Box 缩进在SSD中引入了Prior Box,实际上与anchor非常类似,就是一些目标的预选框,后续通过softmax分类+bounding box ...

  6. Excel 2016 Power View选项卡不显示的问题

    https://zhuanlan.zhihu.com/p/43543442 PowerView是Excel中的Power系列插件之一,可以基于excel制作交互式仪表板. 初学者在使用Power Vi ...

  7. window.name实现的跨域数据传输 JavaScript跨域总结与解决办法

    原文地址:  http://www.cnblogs.com/rainman/archive/2011/02/20/1959325.html#m4 什么是跨域 1.document.domain+ifr ...

  8. 数据库实例: STOREBOOK > 数据文件/退回字段/重做日志组|管理员

    ylbtech-Oracle:数据库实例: STOREBOOK  > 数据文件/退回字段/重做日志组|管理员 数据文件/退回字段/重做日志组|管理员 1. 数据库实例: STOREBOOK  & ...

  9. DatabaseMirroring搭建

    1.    概述 数据库镜像维护一个数据库的两个副本,这两个副本必须驻留在不同的 SQL Server 数据库引擎 服务器实例上.通常,这些服务器实例驻留在不同位置的计算机上.启动数据库上的数据库镜像 ...

  10. 异常捕获 UncaughtExceptionHandler MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...