一、选择排序

1、原始数组

2、遍历数组找到最小值索引,并将最小值索引与当前遍历索引位置互换

3、确定最小位置值,进行下一次遍历

4、java代码实现

/**
* author:sam
* date:2018/1/26 14:11
* describe:选择排序
*/
public void selectSort(int[] arr){
for (int i = 0; i < arr.length; i++) {
int minIndex = i;
for (int j = i; j < arr.length; j++) {
if(arr[minIndex] > arr[j])
minIndex = j;
}
SortUtils.swap(arr,minIndex,i);
}
} 二、插入排序   扑克牌整理牌型时思想,对于有序数组效率非常高。

1、以[0]位置数据为基点依次遍历后续数据

2、后续数据依次与当前数据进行比较,并将数据插入到合适位置

3、进行下依次插入

4、java代码实现

/**
* author:sam
* date:2018/3/7 10:49
* describe:插入排序
*/
@Override
public void insertSort(int[] arr) { for (int i = 1; i < arr.length; i++) {
for (int j = i; j > 0 && arr[j] < arr[j-1]; j--){
SortUtils.swap(arr, j, j - 1);
}
}
}

5、插入排序优化

/**
* author:sam
* date:2018/3/7 12:21
* describe:插入排序优化
*/
@Override
public void optimizeInsertSort(int[] arr) { for (int i = 1; i < arr.length; i++) {
int e = arr[i];
int index = i;
for (int j = i; j > 0 && arr[j-1] > e; j--) {
arr[j] = arr[j - 1];
index = j - 1;
}
arr[index] = e;
} }

三、冒泡排序

1、冒泡排序
/**
* author:sam
* date:2018/3/7 14:37
* describe:冒泡排序
*/
public void bubbleSort(int[] arr){ for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr.length - i -1; j++) {
if(arr[j] > arr[j+1]){
SortUtils.swap(arr,j,j+1);
}
}
}
} 2、冒泡排序优化
/**
* author:sam
* date:2018/3/7 14:49
* describe:优化冒泡排序
*/
@Override
public void optimizeBubbleSort(int[] arr){
/*boolean flag;
int n = arr.length;
do{
flag = false;
for (int i = 1; i < n; i++) {
int j;
if(arr[i] < arr[j = i-1]) {
SortUtils.swap(arr, i, j);
flag = true;
}
}
n--;
}while(flag);*/
boolean flag;
int n = arr.length;
do{
flag = false;
int j;
for (int i = 0; i < n - 1; i++) {
if(arr[i] > arr[j = i + 1]){
SortUtils.swap(arr,i,j);
flag = true;
}
}
n--;
}while(flag);
}

四、shell排序

  

(1)常见O(n^2)排序算法解析的更多相关文章

  1. python常见排序算法解析

    python——常见排序算法解析   算法是程序员的灵魂. 下面的博文是我整理的感觉还不错的算法实现 原理的理解是最重要的,我会常回来看看,并坚持每天刷leetcode 本篇主要实现九(八)大排序算法 ...

  2. python——常见排序算法解析

    算法是程序员的灵魂. 下面的博文是我整理的感觉还不错的算法实现 原理的理解是最重要的,我会常回来看看,并坚持每天刷leetcode 本篇主要实现九(八)大排序算法,分别是冒泡排序,插入排序,选择排序, ...

  3. Java常见的几种排序算法-插入、选择、冒泡、快排、堆排等

    本文就是介绍一些常见的排序算法.排序是一个非常常见的应用场景,很多时候,我们需要根据自己需要排序的数据类型,来自定义排序算法,但是,在这里,我们只介绍这些基础排序算法,包括:插入排序.选择排序.冒泡排 ...

  4. 【转载】常见十大经典排序算法及C语言实现【附动图图解】

    原文链接:https://www.cnblogs.com/onepixel/p/7674659.html 注意: 原文中的算法实现都是基于JS,本文全部修改为C实现,并且统一排序接口,另外增加了一些描 ...

  5. DualPivotQuicksort 排序算法解析

    DualPivotQuicksort是JDK1.7开始的采用的快速排序算法. 一般的快速排序采用一个枢轴来把一个数组划分成两半,然后递归之. 大量经验数据表面,采用两个枢轴来划分成3份的算法更高效,这 ...

  6. [算法] 常见排序算法总结(C语言版)

    常见排序算法总结 本文对比较常用且比较高效的排序算法进行了总结和解析,并贴出了比较精简的实现代码,包括选择排序.插入排序.归并排序.希尔排序.快速排序等.算法性能比较如下图所示: 1 冒泡排序 基本原 ...

  7. Java几种常见的排序算法

    一.所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作.排序算法,就是如何使得记录按照要求排列的方法.排序算法在很多领域得到相当地重视,尤其是在大量数据的处理方面. ...

  8. Java的几种常见排序算法

    一.所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作.排序算法,就是如何使得记录按照要求排列的方法.排序算法在很多领域得到相当地重视,尤其是在大量数据的处理方面. ...

  9. 各种排序算法的总结、比较与Java实现

    1 快速排序(QuickSort) 快速排序是一个就地排序,分而治之,大规模递归的算法.从本质上来说,它是归并排序的就地版本.快速排序可以由下面四步组成. (1) 如果不多于1个数据,直接返回.(2) ...

随机推荐

  1. MongoDB 基本操作学习笔记

    // 查看所有数据库 show dbs // amdin 0.000GB // local 0.000GB // 使用数据库 use admin // switched to db admin // ...

  2. css层叠样式初学

    一.css简介 1.层叠样式表:叠加效果,不同css对同一html修饰,冲突部分,优先级高作用,不冲突部分,共同作用 2.css作用 (1)修饰html (2)替代了标签自身的颜色,字号等属性,提高复 ...

  3. 包装类和基本类型区别?(integer和int取值范围一样大)

    1.声明方式不同,int不需要new .Integer需要new 2.性质上根本不同点:int是基本数据类型.Integer是引用数据类型,它有自己的属性,方法 3.存储位置和方式不同:int是存储在 ...

  4. nodejs cluster模块初探

    大家都知道nodejs是一个单进程单线程的服务器引擎,不管有多么的强大硬件,只能利用到单个CPU进行计算.所以,为了使用多核cpu来提高性能 就有了cluster,让node可以利用多核CPU实现并行 ...

  5. 只用120行Java代码写一个自己的区块链

    区块链是目前最热门的话题,广大读者都听说过比特币,或许还有智能合约,相信大家都非常想了解这一切是如何工作的.这篇文章就是帮助你使用 Java 语言来实现一个简单的区块链,用不到 120 行代码来揭示区 ...

  6. (转)Elasticsearch 5 Ik+pinyin分词配置详解

    今天以这篇文章结束同城旅游网的面试,正好面试官也问到站内检索,可以尝试一下这篇文章介绍的方法.Elasticsearch 5 Ik+pinyin分词配置详解

  7. git stash暂存文件

    git stash 可用来暂存当前正在进行的工作, 比如想pull 最新代码,但又不想提交代码.先git stash暂存,pull之后,用git stash pop或者git stash apply取 ...

  8. Nodejs的运行原理-函数回调篇

    前言 当客户端向http server 发起TCP链接时,server端会发起一系列的callback调用,这是一个逆向调用的过程:开始于libuv,终止于js代码里的callback(promise ...

  9. 剑指offer试题(PHP篇二)

    6.旋转数组的最小数字 题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素. 例如数组{3,4,5,1,2}为{1 ...

  10. 正负样本比率失衡SMOTE

    正负样本比率失衡SMOTE [TOC] 背景 这几天测试天池的优惠券预测数据在dnn上面会不会比集成树有较好的效果,但是正负样本差距太大,而处理这种情况的一般有欠抽样和过抽样,这里主要讲过抽样,过抽样 ...