概述:排序算法,即通过特定的算法因式将一组或多组数据按照既定模式进行重新排序。这种新序列遵循着一定的规则,体现出一定的规律,因此,经处理后的数据便于筛选和计算,大大提高了计算效率。

常见的有:冒泡排序、选择排序、插入排序、快速排序、堆排序、归并排序、希尔排序、基数排序等。

1、冒泡排序

        概述:冒泡排序可以说是排序算法中最为简单的一种。

它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首字母从Z到A)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。

这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样(这是因为组成小气泡的二氧化碳比水要轻,所以小气泡可以一点一点向上浮动。),故名“冒泡排序”。

        排序核心思想: 相邻元素做比较,两两比较小靠前。

1.将相邻的两个元素进行比较,比较完后,按照元素大小进行移位,小的移动到前面,大的移动到后面。2.每一轮比较完后,"最大的元素" 将被移位到最后。在下一轮比较的时候,这个 "最大的元素" 就不需要再参与比较了。3.重复进行上述步骤,经过 N - 1 轮比较之后,排序完成。(N:代表的是要比较的元素个数)

例:

int[] arr = {23, 32, 12, 21, 19, 91};
for (int i = 0; i < arr.length - 1; i++) {for (int j = 0; j < arr.length - 1 - i; j++) {if (arr[j] > arr[j + 1] ) {int temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}}
}
System.out.println(Arrays.toString(arr));//输出结果[12, 19, 21, 23, 32, 91]

2、选择排序

        概述:它是一种简单直观的排序算法。

它的工作原理是:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。

以此类推,直到全部待排序的数据元素的个数为零。选择排序是不稳定的排序方法。

        排序核心思想: 打擂台求最小值思路。

1.第一次比较的时候,先将 "第一个元素" 假定为最小元素值。2.然后将第一个元素依次和后面的所有元素进行比较大小,如果后面的元素比第一个元素小,则进行交换。3.每一轮比较完后,"最小的元素" 将被移位到 "第一个元素位置"。在下一轮比较的时候,这个 "最小的元素" 就不需要再参与比较了。4.重复的进行上面步骤,经过 N - 1 轮比较之后,排序完成。(N:代表的是要比较的元素个数)

例:

int[] arr = {23, 32, 12, 21, 19, 91};
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;}}
}
System.out.println(Arrays.toString(arr));//输出结果[91, 32, 23, 21, 19, 12]

3、插入排序

        概述:一般也称为直接插入排序。对于少量元素的排序,它是一个有效的算法。

        插入排序是一种最简单的排序方法,它的基本思想是将一个记录插入到已经排好序的有序表中,从而一个新的、记录数增1的有序表。在其实现过程使用双层循环,外层循环对除了第一个元素之外的所有元素,内层循环对当前元素前面有序表进行待插入位置查找,并进行移动。

        排序核心思想: 在有序数列中做插入,并保持住有序。

        1.首先将第一个元素就看作是一个已经排序好的数列,后面的其他元素则看作未排序数列。{{a1}, {a2, a3, a4, ..., an}}

        2.然后将第二个元素在已经排序好的数列中,做插入动作。即在已经排序好的数列中,从后向前依次查找符合升序规律的位置,并插入到该位置。这样新的已经排序好的数列就变为了:{{a1, a2}, {a3, a4, ..., an}}

        3.重复这个步骤,直到排序结束。

例:

int[] arr = {23, 32, 12, 21, 19, 91};
for (int i = 1; i < arr.length; i++) {for (int j = i; j > 0 ; j--) {if (arr[j] > arr[j - 1]) {int temp = arr[j - 1];arr[j - 1] = arr[j];arr[j] = temp;}}
}
System.out.println(Arrays.toString(arr));//输出结果[91, 32, 23, 21, 19, 12]

Java基础 排序算法相关推荐

  1. 【Java】基础排序算法-插入排序

    基础排序算法-------插入排序 实现过程: 插入排序的过程就像整理桥牌的过程:每次将待排元素中的第一个元素插入到有序区间的合适位置,为了给当前待排元素腾出位置,需要将有序区间内所有大于待排元素的其 ...

  2. 基础排序算法及其优化(Java)

    文章预览: 一.基础排序算法 1.冒泡排序 冒泡排序的优化 1.添加flag 2.减少循环次数(后面已有序) 2.选择排序 选择排序优化 3.插入排序 插入排序的进阶 - 二分插入排序 注:冒泡排序v ...

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

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

  4. 基础排序算法--冒泡法

    基础排序算法–冒泡法 我认为的冒泡法就是一个一个挨着比,相邻的两个数比较,如果是从小到大排序,那么第一次走到最后的就是最大的数字,反之. 动图理解 代码解析 package ccc;import ja ...

  5. 基础排序算法详解与优化

    文章图片存储在GitHub,网速不佳的朋友,请看<基础排序算法详解与优化> 或者 来我的技术小站 godbmw.com 1. 谈谈基础排序 常见的基础排序有选择排序.冒泡排序和插入排序.众 ...

  6. Java常见排序算法

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

  7. C语言基础排序算法-选择排序

    C语言基础排序算法-选择排序 什么是选择排序? 选择排序(Selection sort)是一种简单直观的排序算法,第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从 ...

  8. C语言基础排序算法-冒泡排序

    C语言基础排序算法-冒泡排序 什么是冒泡排序? 顾名思义,这种排序方法就像水中的气泡一样,从底逐渐往上冒,一次前进一步.我们来看一个例子,看看到底是怎么冒泡的.假设有一个数组3,2,5,4,1,我们希 ...

  9. php四种基础排序算法的运行时间比较

    /*** php四种基础排序算法的运行时间比较* @authors Jesse (jesse152@163.com)* @date 2016-08-11 07:12:14*/ //冒泡排序法 func ...

最新文章

  1. WebService的两种方式SOAP和REST比较 (转)
  2. 对 MVC,MVT 解读的理解
  3. asp.net环境下的静态类以及静态变量
  4. LeetCode 2145. 统计隐藏数组数目(前缀和)
  5. Vue中computed和watch的区别(面试题)
  6. 一步步构建大型网站架构(转载)
  7. c语言如何将字母向下移一格,c语言 如何将一个字符串的前n个字母后移至尾,其他的按顺序前移?...
  8. 【HDOJ6071】Lazy Running(同余最短路思想)
  9. 关于破解广州天翼校园 + 小米路由器实现自动上网 突破wifi限制
  10. 全国重点城市建筑物矢量数据合集二(Shp格式+带高度)
  11. XenApp6.5启用3D功能
  12. 计算机分屏功能吗,电脑分屏显示
  13. 导数、微分、偏导数、全微分、方向导数、梯度的定义与关系
  14. IM即时通讯/原生APP/H5聊天/在线客服/高仿VX/uniapp版本/视频通话/语音通话/带视频部署教程
  15. 爬虫——获取页面源代码
  16. Android sim卡 pin码解锁流程.
  17. ps怎么把黑白照片变成彩色?ps把儿童黑白照变彩色教程
  18. 教你编写DOTA外挂
  19. Sublime 安装与中文配置
  20. 海上风电场对雷达性能的影响——绕射损耗

热门文章

  1. Python 操作符
  2. 用 .NET 启动你的 大疆 Ryze Tello 无人机
  3. Java--图形用户和多线程
  4. 帮我写一篇C语言课程的课程实施报告,第一章写整体教学设计,第二章写教学实施流程,第三章写学习效果,第4章写特色与创新,第5章写教学反思与改进...
  5. faiss 三种基础索引方式
  6. 试试这三个黑科技APP,带给你不一样的体验
  7. 统计复用系统为什么避免不了排队
  8. 【量化投资实训】基于MATLAB实验三.指数移动平均SMA
  9. google商店打不开,闪退 google play服务已停止
  10. 哪些主板支持三代服务器内存,支持三代内存的主板CPU有哪些