最近整理了几种常见排序算法,基于java代码实现,都只是点干货,没有过多原理分析,后期会持续更新

/*** * 冒泡排序 @author :manzi Create Date : 2019年4月29日 下午6:55:20* * 原理:比较两个相邻的元素,将值大的元素交换至右端。* * 1思路:依次比较相邻的两个数,将小数放在前面,大数放在后面。* 2即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。* 3然后比较第2个数和第3个数,将小数放前,大数放后,* 4如此继续,直至比较最后两个数,将小数放前,大数放后。* 5重复第一趟步骤,直至全部排序完成。*/public static void bubbleSort(int[] arr) {for (int i = 0; i < arr.length - 1; i++) {for (int j = i + 1; j < arr.length; j++) {if (arr[i] > arr[j]) {int temp = arr[i];arr[i] = arr[j];arr[j] = temp;}}}}/*** * 插入排序 @author :manzi Create Date : 2019年4月29日 下午6:55:46* * 原理:将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,*      算法适用于少量数据的排序,时间复杂度为O(n^2)。是稳定的排序方法。* * 1从第一个元素开始,该元素可以认为已经被排序 * 2取出下一个元素,在已经排序的元素序列中从后向前扫描* 3如果该元素(已排序)大于新元素,将该元素移到下一位置 * 4重复步骤3,直到找到已排序的元素小于或者等于新元素的位置 * 5将新元素插入到该位置后* 6重复步骤2~5* */public static void insertSortFor(int[] arr) {for (int i = 0; i < arr.length - 1; i++) {for (int j = i + 1; j > 0; j--) {if (arr[j] < arr[j - 1]) {int temp = arr[j];arr[j] = arr[j - 1];arr[j - 1] = temp;} else {break;}}}}public static void insertSortWhile(int[] arr) {for (int i = 1; i < arr.length; i++) {int temp = arr[i];while (i > 0 && temp < arr[i - 1]  ) {arr[i] = arr[i - 1];i--;}arr[i] = temp;}}/*** * 选择排序 @author :manzi Create Date : 2019年4月29日 下午6:56:30** 原理:选择排序,从头至尾扫描序列,找出最小的一个元素,和第一个元素交换,接着从剩下的元素中继续这种选择和交换方式,最终得到一个有序序列* * 1.将序列分为两段,有序前列[0,r)和无序后列[r,n-1]* 2.在无序后列中查找最大元素s=A[m],记住其所在位置* 3.将无序后列中的最大元素与无序前列的首位元素进行交换* 4.循环停止标识:无序后列只剩余最后一个元素*/public static void selectSort(int[] arr) {for (int i = 0; i < arr.length; i++) {int k = i;for (int j = i; j < arr.length; j++) {if (arr[j] < arr[k]) {k = j;}}if (k != i) {int temp = arr[i];arr[i] = arr[k];arr[k] = temp;}}}/*** * 快速排序 @author :manzi Create Date : 2019年4月29日 下午6:56:30* * 原理:底层是冒泡排序。它是通过一趟排序,将一组数据分为两部分,* 其中一部分要比另一部分的所有数据都要小,然后再用此方法分别进行快速排序,以达到一组数据的有序排序* * 1.先从数列中取出一个数作为基准数。* 2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。* 3.再对左右区间重复第二步,直到各区间只有一个数。* * 挖坑填数+分治法+递归*/public static void quickSort(int[] arr, int left, int right) {if (left >= right) {return;}int i = left;int j = right;int dest = arr[i];while (i < j) {while (i < j && dest <= arr[j]) {j--;}if (i < j) {arr[i++] = arr[j];}while (i < j && dest > arr[i]) {i++;}if (i < j) {arr[j--] = arr[i];}}arr[i] = dest;quickSort(arr, left, i - 1);quickSort(arr, i + 1, right);}/*** * 归并排序 @author :manzi Create Date : 2019年4月29日 下午6:56:30* * 原理:排序一个数组,把数组从中间分为两部分,然后对前后两部分进行分别排序。最后把排序好的两部分都合并在一起,在合并的时候也会进行排序* * 1申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列 * 2设定两个指针,最初位置分别为两个已经排序序列的起始位置* 3比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置 * 4重复步骤3直到某一指针达到序列尾* 5将另一序列剩下的所有元素直接复制到合并序列尾* 6将临时数组中元素替换原数组元素*/public static void mergeSort(int[] arr, int low, int high) {int middle = (high + low) / 2;if (low < high) {mergeSort(arr, low, middle);mergeSort(arr, middle + 1, high);mergeSort(arr, low, middle, high);}}public static void mergeSort(int[] arr, int low, int middle, int high) {int i = low;int j = middle + 1;int k = 0;int temp[] = new int[high - low + 1];while (i <= middle && j <= high) {if (arr[i] < arr[j]) {temp[k++] = arr[i++];} else {temp[k++] = arr[j++];}}while (i <= middle) {temp[k++] = arr[i++];}while (j <= high) {temp[k++] = arr[j++];}while (high >= low) {arr[high--] = temp[--k];}}

转载于:https://www.cnblogs.com/zmanzi/p/10803443.html

常见排序算法原理及java实现相关推荐

  1. ++代码实现 感知机的原理_常见排序算法原理及JS代码实现

    来源:SegmentFault 思否社区 作者:Warren 本文只是将作者学习的过程以及算法理解进行简单的分享,提供多一个角度的理解说明,或许让你的困惑能得以解决(代码或说明若有问题,欢迎留言.联系 ...

  2. java 排序原理_简单选择排序算法原理及java实现(超详细)

    简单选择排序的原理 简单选择排序的原理非常简单,即在待排序的数列中寻找最大(或者最小)的一个数,与第 1 个元素进行交换,接着在剩余的待排序的数列中继续找最大(最小)的一个数,与第 2 个元素交换.以 ...

  3. 常见排序算法原理及实现——第二部分(归并排序、快速排序、堆排序)

    引言 排序算法第一部分,我们聊了冒泡排序.插入排序.选择排序这三种排序算法,它们的时间复杂度比较高,都是 O(n2),适合小规模数据的排序.今天,我们来看三种时间复杂度为 O(nlogn) 的排序算法 ...

  4. c语言程序排序的原理,几种常见排序算法原理C语言实现

    使用WatiN进行UI自动化测试 Watin是一个UI自动化测试工具,支持ie/firefox,官方网站:http://watin.org/. 主要有以下特点: 支持主要的html元素,见:http: ...

  5. Java 实现常见排序算法

    Java 实现常见排序算法 1. 综述 复习常见排序算法,用Java实现. 2. 代码 1 package cn.edu.tju.scs; 2 3 public class Sort { 4 publ ...

  6. Java常见排序算法之插入排序

    一.概述 本节由小千给大家分享Java常见排序算法之插入排序,之前我们说过排序是算法中的一部分.所以我们学习排序也是算法的入门,为了能让大家感受到排序是算法的一部分,我举个例子证明一下:比如麻将游戏, ...

  7. Java常见排序算法

    Java常见排序算法 转载于:https://www.cnblogs.com/hfultrastrong/p/7829889.html

  8. android studio插入数据表中没有_学Java能拿高薪吗 Java中常见排序算法有哪些

    学Java能拿高薪吗?Java中常见排序算法有哪些?作为老牌编程语言,Java拥有广阔的市场占有率,几乎90%以上的大中型互联网应用系统在服务端开发都会首选Java.为了加入到Java这一高薪行业,很 ...

  9. java排序算法原理_排序算法原理与实现(java)

    排序算法原理与实现(java) Java程序员必知的8大排序 [来源:本站 | 日期:2012年12月24日 | 浏览173 次] 字体:[大 中 小] 8种排序之间的关系: 1, 直接插入排序 (1 ...

  10. 常见排序算法的原理与实现(js)

    常见排序算法通常需要通过比较来确定次序(比较类排序):由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序. 各类排序算法的特点: 术语解释: 时间复杂度:对排序数据的总的操作次数 ...

最新文章

  1. webfocus在移动终端上的应用DEMO
  2. 文字在div中垂直居中
  3. jquery跟js初始化加载的多种方法及区别介绍
  4. python多线程队列处理_Python线程和队列使用的一点思考
  5. js encodeurl java接收_在JS中encodeURI(url)怎样才能不出现乱码?
  6. php脚本哪里找,我在哪里可以找到PHP-FPM RC脚本?
  7. gzp解压命令 linux_Linux-压缩解压命令(gzip,zip,tar,bzip)
  8. php更换wordpress用户头像,WordPress主题设置在前台页面添加用户头像教程
  9. 软件测试基础 ——— 测试分析
  10. 鸿蒙系统图标大小怎么调节,华为手机桌面图标大小怎么调?用华为手机的朋友这些技巧需要了解...
  11. IPv6实验5:IPv4到IPv6的过渡
  12. 如何破“万事开头难”?试试这三招
  13. 思科WLC与AP无法正常Join
  14. 【热门主题:萤火之夜xp桌面】
  15. linux操作系统的分类及解释
  16. 企业利用进销存软件可优化库存管理
  17. 高可用网络架构的部署
  18. 探秘之阿里云 OSS 数据存储 API
  19. QQ2013 协议分析
  20. hadoop1.1.2分布式安装---集群动态增减节点

热门文章

  1. 巧用立体声codec CL1026 的EQ
  2. Learning a Proposal Classifier for Multiple Object Tracking
  3. python设置散点图点的大小_matplotlib - pyplot散点图标记大小
  4. 团购幸存者:团购是个苦生意
  5. Python拉勾网爬虫实现
  6. 设备零线地线短路维修
  7. php odbc informix,Informix CLI 与 ODBC
  8. unbalanced calls to begin/end appearance transitions for uiviewcontroller的解决方法
  9. 判断时间复杂度和空间复杂度
  10. msgbox php,HTML_MsgBox函数语言参考,描述  在对话框中显示消息 - phpStudy