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

算法之排序

概述

记录排序算法。

1 选择排序

在这里插入图片描述

*** 选择排序* 思路:遍历数组,找出(选择)最小的元素,然后和最左边的元素交换。接下来,再从第二个元素开始遍历整个数组。再找到最小的元素,再和第二个元素交换。* 重复该过程,直至遍历完成。* 时间复杂度:n^2* 空间复杂度:1(原地排序,除了临时变量不需要额外空间)* @param arr 数组* @return 排好序的数组*/public static int[] selectSort(int[] arr){// 边界条件if(arr.length < 1){return arr;}// 0 - n// 1 - n// ...// i - nfor(int i = 0; i < arr.length; i++){int minIndex = i;// 在i-n范围内找最小的for(int j = i+1; j < arr.length; j++){if(arr[minIndex] > arr[j]){minIndex = j;}}swap(i, minIndex, arr);}return arr;}/*** 索引i和j位置的元素交换* @param i 索引* @param j 索引* @param arr 数组*/public static void swap(int i, int j, int[] arr){int temp = arr[i];arr[i] = arr[j];arr[j] = temp;}

2 冒泡排序

/*** 2冒泡排序* 关键词:两两比较* 思路:* 第一次遍历,从0到n-1遍历数组。两两比较,大的元素往后排,最后遍历结束时,最大的元素就排在了数组末尾。* 第二次遍历,从0到n-2遍历数组。两两比较,大的元素往后排,最后遍历结束时,0到n-2中最大的元素就排在了数组n-1的位置处。* ...* 时间复杂度:n^2* 空间复杂度:1* 注意:因为是j+1,为防止越界,添加条件1:j <= i-1;又因为是i-1,添加条件2:i > 0;* @param arr 数组* @return 排好序的数组*/public static int[] bubbleSort(int[] arr){// 边界条件if(arr.length < 2){return arr;}for(int i = arr.length - 1; i > 0; i--){// 从0到i遍历,两两比较for(int j = 0; j <= i-1; j++){if(arr[j] > arr[j+1]){swap(j, j+1, arr);}}}return arr;}

3 插入排序

/*** 插入排序* 理解:打牌,在发牌时,先整理好手上的牌。拿到新发的牌后,往手上已经整理好的牌中插入。* 思路:* 从0到0,自己和自己比,不用排序* 从0到1,小的往前排,直至排到第一个位置* 从0到2,小的往前排,直至拍到第一个位置或者前面的更小* @param arr 数组* @return 有序数组*/public static int[] insertSort(int[] arr){if(arr == null || arr.length < 2){return arr;}for(int i = 0; i < arr.length; i++){for(int j = i; j >= 0; j--){if(j-1 < 0){continue;}if(arr[j-1] > arr[j]){swap(j, j-1, arr);}}}return arr;}
http://www.lryc.cn/news/461460.html

相关文章:

  • 深度学习:LSTM循环神经网络实现评论情感分析
  • 基于Arduino的环境监测装置
  • 深度学习:模型攻击(Model Attack)详解
  • CesiumLab介绍
  • PyQt 入门教程(3)基础知识 | 3.2、加载资源文件
  • 老照片修复工作流教程:用 ComfyUI 轻松还原历史记忆
  • ESP-IDF Blink实例学习
  • QT QML 练习8-Simple Transformations
  • 低空产业园搭建技术详解
  • Python网络爬虫从入门到实战
  • 探索Theine:Python中的AI缓存新贵
  • js拼图(神鹰黑手哥)
  • 值得推荐的五款数据恢复工具!!
  • 股票金融市场中的tick,分钟,日线数据
  • OKG Research:如何衡量链上数据的开放价值?
  • 向日葵下载教程以及三款远程控制工具推荐!!!
  • Studio One 6中文版及最新功能介绍 Studio One 6音乐软件安装包
  • 【数据结构】栈和队列 + 经典算法题
  • C# 基于winform 使用NI-VISA USB口远程控制电源 万用表
  • Python设计方差分析实验
  • 【Oracle DB故障分享】分享一次由于SGA设置太小导致的DP备份失败
  • Yocto构建教程:在SDK中添加Qt5并生成带有Qt5的SDK
  • 操作系统——位示图
  • 【STM32 Blue Pill编程实例】-矩阵键盘
  • 基于SSM的药品商城系统
  • 南京邮电大学电工电子A实验十一(数据选择器及逻辑电路的动态测试)
  • 算法.图论-BFS及其拓展
  • mongodb的相关关键字说明
  • 强化学习之DDPG算法
  • 【进阶OpenCV】 (16)-- 人脸识别 -- FisherFaces算法