选择排序

  • 基本思想:
    设所排序序列个数为N,i取1,2,3…n-1,从N-i+1个记录(Ri,Ri+1….Rn)中找出排序码最小的记录,与第i个记录交换,执行N-1次后完成序列的排序。
//选择排序
private static void selectSort(int[] arr, int n) {for (int i = 0; i < n - 1; ++i) {for (int j = i + 1; j < n; ++j) {if (arr[i] > arr[j]) {int t = arr[i];arr[i] = arr[j];arr[j] = t;}}}
}

冒泡排序

  • 基本思想:
    相邻的元素进行两两比较,顺序相反则进行交换,每一次都会将最大或最小的元素"浮上来",最终达到有序
//冒泡排序
private static void bubbleSort(in[] arr, into n) {for (int i = 0; i < n - 1; ++i) {for (int j = 0; j < n - 1 - i; ++j) {if (arr[j] > arr[j + 1]) {int t = arr[j];arr[j] = arr[j + 1];arr[j + 1] = t;}}}
}

归并排序

  • 将若干有序序列进行两两合并,直到待排序记录都在一个有序序列中为止
//归并排序
private static void mergeSort(int[] arr, int n) {mergeSort(arr, 0, n - 1);
}private static void mergeSort(int[] arr, int low, int high) {if (low < high) {int mid = (low + high) / 2;// 左边mergeSort(arr, low, mid);// 右边mergeSort(arr, mid + 1, high);// 左右归并merge(arr, low, mid, high);}
}private static void merge(int[] arr, int low, int mid, int high) {int[] temp = new int[high - low + 1];int i = low;// 左指针int j = mid + 1;// 右指针int k = 0;// 把较小的数先移到新数组中while (i <= mid && j <= high) {if (arr[i] < arr[j]) {temp[k++] = arr[i++];} else {temp[k++] = arr[j++];}}// 把左边剩余的数移入数组while (i <= mid) {temp[k++] = arr[i++];}// 把右边边剩余的数移入数组while (j <= high) {temp[k++] = arr[j++];}// 把新数组中的数覆盖arr数组for (int k2 = 0; k2 < temp.length; k2++) {arr[k2 + low] = temp[k2];}
}

快速排序

  • 基本思想:
    通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序。
//快速排序
private static void quickSoft(int arr[], int length) {quickSoft(arr, 0, length - 1);
}private static void quickSoft(int arr[], int low, int high) {int pos;if (low < high) {pos = partition(arr, low, high);quickSoft(arr, low, pos - 1);quickSoft(arr, pos + 1, high);}
}private static int partition(int[] arr, int low, int high) {int val = arr[low];while (low < high) {while (low < high && arr[high] >= val) {--high;}arr[low] = arr[high];while (low < high && arr[low] <= val) {++low;}arr[high] = arr[low];}arr[low] = val;return low;
}

插入排序

  • 基本思想:
    每次将一个待排序的记录按其关键码的大小插入到一个已经排好序的有序序列中,直到全部记录排好序。
 //插入排序
private static void insertSoft(int[] arr, int n) {for (int i = 1; i < n; i++) {int t = arr[i];int k = i;for (int j = i - 1; j >= 0 && arr[j] > t; --j) {arr[j + 1] = arr[j];k = j;}arr[k] = t;}
}

选择排序-冒泡排序-归并排序-快速排序-插入排序相关推荐

  1. 选择排序java从小到大代码_java中选择排序与归并排序的内容,详细解析

    上次我们已经为大家介绍过java中插入.分治和快速排序的内容,今天再来为大家介绍一下java中选择排序与归并排序的具体内容,并且通过实际的代码为大家解析. 首先我们需要了解的是,选择排序也是一种简单直 ...

  2. 常用排序:冒泡排序与快速排序详解,看完这篇就够了!风马博客

    常用排序:冒泡排序与快速排序详解. 在排序算法中,冒泡排序和快速排序可以算是排序算法入门必会的两种排序了,今天和大家来分析一下如何快速理解并掌握这两种排序.首先冒泡排序是初学者最常用的排序,所以我们先 ...

  3. 排序算法--(冒泡排序,插入排序,选择排序,归并排序,快速排序,桶排序,计数排序,基数排序)

    一.时间复杂度分析 - **时间复杂度**:对排序数据的总的操作次数.反应当n变化时,操作次数呈现什么规律 - **空间复杂度**:算法在计算机内执行时所需要的存储空间的容量,它也是数据规模n的函数. ...

  4. 数据结构(八):排序 | 插入排序 | 希尔排序 | 冒泡排序 | 快速排序 | 简单选择排序 | 堆排序 | 归并排序 | 基数排序 | 外部排序 | 败者树 | 置换-选择排序 | 最佳归并树

    文章目录 第八章 排序 一.排序的基本概念 (一)什么是排序 (二)排序的应用 (三)排序算法的评价指标 (四)排序算法的分类 (五)总结 二.插入排序 (一)算法思想 (二)算法实现 (三)算法效率 ...

  5. 直接插入排序 希尔排序 冒泡排序 快速排序 直接选择排序 堆排序 归并排序 基数排序的算法分析和具体实现 ...

    排序分为内部排序和外部排序 内部排序是把待排数据元素全部调入内存中进行的排序. 外部排序是因数量太大,把数据元素分批导入内存,排好序后再分批导出到磁盘和磁带外存介质上的排序方法. 比较排序算法优劣的标 ...

  6. 快速排序、希尔排序、插入排序、选择排序、归并排序、堆排序总结

    一.快速排序的基本思想     设当前待排序的无序区为R[low..high],利用分治法可将快速排序的基本思想描述为: ①分解:     在R[low..high]中任选一个记录作为基准(Pivot ...

  7. 内排序及时间复杂度分析-插入排序选择排序交换排序归并排序分配和索引排序对比...

    基本概念 什么是排序? 排序 将序列中的记录按照排序码顺序排列起来 排序码域的值具有不减(或不增)的顺序 内排序 整个排序过程在内存中完成 给定一个序列 R = { r1, r2, ...,rn } ...

  8. iOS swift 选择排序 冒泡排序 快速排序

    返回上级目录:iOS 算法题 三大经典排序 | 冒泡排序,选择排序,快速排序 - 知乎 文章目录 1.选择排序 2.冒泡排序 3.快速排序 1.选择排序 //选择排序 func rankSelect( ...

  9. 选择排序 冒泡排序 二分查找

    选择排序 int [] arr = {2,48,28,32,90,12}; for(int i= 0: i < arr.length - 1;i++){ for(int j = i + 1; j ...

最新文章

  1. 人工智能时代,程序员要不要精通算法?
  2. 成功解决IndexError: shape mismatch: indexing arrays could not be broadcast together with shapes (100,)
  3. NumPy中的where()函数
  4. 全面剖析C#正则表达式
  5. Spring –持久层–编写实体并配置Hibernate
  6. 2022年中国物联网行业研究报告
  7. Lua-Nginx-Module常用指令(下)
  8. Android 系统(263)---Glide框架
  9. 用纯fme批量生成界址点成果表(模板格式全部自拟)
  10. 211. 字符串置换
  11. 沪深交易所的集合竞价机制
  12. C++ 的算术、自增自减、位运算、关系与逻辑运算符(数据的操作)
  13. [VOT10](2022CVPR)TCTrack: Temporal Contexts for Aerial Tracking
  14. QMS-云质-质量管理-海克斯康为什么不断收购质量管理软件(QMS)?
  15. Ethernet(以太网) 详解 MAC、MII、PHY
  16. B. Multiply by 2, divide by 6(数学) Codeforces Round #653 (Div. 3)
  17. 2017福建省计算机一级应用技术,2017年一级计算机信息技术及应用考试试题级答案[权威资料]...
  18. weblogic修改控制台密码
  19. 如何将邮件导出为PDF
  20. AI 新技术革命将如何重塑就业和全球化格局?深度解读 UN 报告(中篇)

热门文章

  1. 【Cf Edu #47 F】Dominant Indices(长链剖分)
  2. php提交表单时判断 if($_POST[submit])与 if(isset($_POST[submit])) 的区别
  3. Snort里如何将读取的包记录存到指定的目录下(图文详解)
  4. centos6.5 scala环境变量
  5. linux C 列出目录中的文件列表 包含文件的相关信息
  6. MATLAB中cif用于清除什么,cifti-matlab-master 能够对MRI数据进行功能成像 - 下载 - 搜珍网...
  7. java循环链表类_3、循环链表(java实现)
  8. iframe嵌套页面 跨域_跨域解决方案
  9. oracle19c安装[ins-35180]无法检查可用内存
  10. 为什么进mysql需要用户和密码了_centos5安装 mysql 提示需要用户及密码进入?