当前位置: 首页 > news >正文

(1)常见O(n^2)排序算法解析

一、选择排序

 

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排序

 


  

 

转载于:https://www.cnblogs.com/samualz/p/8515764.html

相关文章:

  • 性能测试---不同视角看性能和相关术语
  • java ee5的新特性
  • [LuoguP1141]01迷宫
  • webpack学习笔记1
  • POJ2187 旋转卡壳 求最长直径
  • 《Java并发编程的艺术》--Java中的锁
  • win10 vs2015源码编译tesseract4.0
  • Go语言备忘录(2):反射的原理与使用详解
  • ubuntu16.04 更换源
  • Django中间件middleware
  • 结构图
  • libimobiledevice --Mingw32交叉编译
  • 在c:forEach作用域外使用标签所产生的值
  • 04-手机套餐:建造者模式
  • css总结1:position定位:absolute/relative/fixed
  • “大数据应用场景”之隔壁老王(连载四)
  • es6(二):字符串的扩展
  • Essential Studio for ASP.NET Web Forms 2017 v2,新增自定义树形网格工具栏
  • Hibernate最全面试题
  • httpie使用详解
  • interface和setter,getter
  • JSDuck 与 AngularJS 融合技巧
  • Js基础知识(四) - js运行原理与机制
  • PHP面试之三:MySQL数据库
  • Python_网络编程
  • Redis 中的布隆过滤器
  • 分享一个自己写的基于canvas的原生js图片爆炸插件
  • 工作踩坑系列——https访问遇到“已阻止载入混合活动内容”
  • 关于 Cirru Editor 存储格式
  • 使用 5W1H 写出高可读的 Git Commit Message
  • 网络应用优化——时延与带宽
  • gunicorn工作原理
  • linux 淘宝开源监控工具tsar
  • 新海诚画集[秒速5センチメートル:樱花抄·春]
  • ​一文看懂数据清洗:缺失值、异常值和重复值的处理
  • ​一些不规范的GTID使用场景
  • # Panda3d 碰撞检测系统介绍
  • #中的引用型是什么意识_Java中四种引用有什么区别以及应用场景
  • ${factoryList }后面有空格不影响
  • (HAL)STM32F103C6T8——软件模拟I2C驱动0.96寸OLED屏幕
  • (附源码)springboot 校园学生兼职系统 毕业设计 742122
  • (力扣题库)跳跃游戏II(c++)
  • (篇九)MySQL常用内置函数
  • (三)docker:Dockerfile构建容器运行jar包
  • (十三)Maven插件解析运行机制
  • (四)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (轉貼) 寄發紅帖基本原則(教育部禮儀司頒布) (雜項)
  • .bat批处理(九):替换带有等号=的字符串的子串
  • .equals()到底是什么意思?
  • .gitattributes 文件
  • .NET开发者必备的11款免费工具
  • /dev/VolGroup00/LogVol00:unexpected inconsistency;run fsck manually
  • @cacheable 是否缓存成功_Spring Cache缓存注解
  • [20170705]diff比较执行结果的内容.txt
  • [20170713] 无法访问SQL Server