• Java集中常见的排序


    排序,就是将一串数组(一个列表)中的元素(整数,数字,字符串等)按某种顺序(增大,减小,字典顺序等)重新排列。

    下面介绍几种排序

    1.冒泡排序

    定义:冒泡排序就是从第一个元素开始,遍历数组,拿相邻的两个元素比较大小,大的排后面,小的移动到前面,通过一轮,得到最后的元素是最大的数.所以,这就需要到双层循环.外层循环控制排序轮数,内层循环用来比较相邻两个元素的大小.

    例子1

    使用冒泡排序排列班级的5个学生的成绩,下面给出主要的代码

    1. public static void main(String[] args) {
    2. //总循环次数为要数组的长度减 1
    3. for (int i = 0; i < score.length - 1; i++) {
    4. for (int j = 0; j < score.length - 1 - i; j++) {
    5. if (score[j] > score[j + 1]) {
    6. double temp = score[j + 1];
    7. score[j + 1] = score[j];
    8. score[j] = temp;
    9. }
    10. System.out.print(score[j] + " ");
    11. }
    12. for (int j = score.length - 1 - i; j < score.length; j++) {
    13. System.out.print(score[j] + " ");
    14. }
    15. System.out.println();
    16. }
    17. }

    因为一开始,就拿最先前面的两个元素做比较,所以最大循环轮数应该为数组的个数(长度)-1;然后内存循环用来比较相邻两个元素的大小.定义一个临时变量来存放数据,使两个元素之间能进行交换.

    同时,冒泡排序的缺点也能看得出来:耗时,每次都需要从头开始比较.为了提高时间效率,下面介绍另一个排序方式.

    2.快速排序

    思路步骤:

    首先需要任意选取一个数据(通常选用第一个数据),作为基准数;

    再将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边;

    再对左右区间重复第二步,直到各区间只有一个数。

    下面用图说明:

     第一张图是最先输入的数据,以第一个数据15作为分割点.

    步骤二:这个过程,是通过遍历数据,分区,把比15小的数据移到这些比15大的数据的左边,分成两份,遍历完一轮,然后把15移到比15小的数据堆的右边

    下面就接着重复步骤二

    现在遍历15的左边,到了以11为基准数,遍历4,8,4,都比11小,第二个4和11交换位置.

     再到4做基准数,遍历4,8;8比4大,黄色的4移到中间做分割点.

    至此,左边区间只有一个数据,左边快速排序完成;同理,右边数据也一样进行排序.

    3.选择排序

    很明显,就是遍历数组,找出一个最小/最大的元素,顺序放在已排好序的数列的最后/最前.代码原理是使用外层循环控制循环轮数,内层循环找出最值,然后交换位置

    例子2

    利用选择排序方法实现对学生的成绩:89,78,69,80,99进行排序,并输出已排序的数组元素。

    1. public static void main(String[] args) {
    2. int arr[] = {89,78,69,80,99};
    3. for (int i = 0; i < arr.length - 1; i++) {
    4. //找到最小值的下标
    5. int min = i;
    6. for (int j = i + 1; j < arr.length; j++) {
    7. if (arr[j] < arr[min]) {
    8. //最小值下标赋给遍历到的那个数
    9. min = j;
    10. }
    11. }
    12. // 将找到的最小值和i位置所在的值进行交换
    13. if (i != min) {
    14. int tmp = arr[i];
    15. arr[i] = arr[min];
    16. arr[min] = tmp;
    17. }
    18. }
    19. for (int i = 0; i
    20. System.out.print(arr[i]+" ");
    21. }
    22. }
    23. }

     总结:排序在java程序中中不可或缺,这个网站里面含有排序的动态过程,结合动画方便去理解,会明白很多排序(冒泡排序,选择排序,插入排序,归并排序,快速排序,计数排序,基数排序) - VisuAlgo

  • 相关阅读:
    JAVA的学习日记
    【Python3】函数相关应用
    一台机器下,多个Java版本的粗放与精细管理
    JavaScript:实现Fedwick树算法(附完整源码)
    【地平线旭日X3派试用体验】WIFI连接,SSH登录,TogetherROS安装(第二节)
    R summarize()分组摘要
    关于scanf和printf的格式控制修饰符
    2.Vue — 模板语法、数据绑定、el与data的写法、数据代理
    WTM 增加IOT 大屏展示界面页面
    独立键盘接口设计(Keil+Proteus)
  • 原文地址:https://blog.csdn.net/guanshengg/article/details/126281576