吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1929|回复: 12
收起左侧

[Java 转载] 排序算法----冒泡和选择排序

[复制链接]
逸帅 发表于 2021-3-20 22:36

排序算法----冒泡和选择排序

1、冒泡排序

冒泡排序的基本思想是:通过对待排序序列从前向后(从下标较小的元素开始),依次比较 相邻元素的值,若发现逆序则交换,使值较大的元素逐渐从前移向后部,就象水底下的气泡一样逐渐向上冒。

1.1冒泡排序代码实现

        //冒泡排序算法
    public static int[] maoPaoSort(int[] initial){
        //temp定义为临时变量
        int temp;
        for (int j = 0; j < initial.length - 1; j++) {
            //每次排序后,下一次排序都会比当前次数少一次,所以直接减j即可
            //假如是从小到大排序,第一次就将最大的排到最右边,第二次只需要将第二大的,排到右边的第二位
            for (int i = 0; i < initial.length - 1 -j; i++) {
                if (initial[i] > initial[i + 1]){
                    //从小到大排序
                    temp = initial[i];
                    initial[i] = initial[i + 1];
                    initial[i+1] = temp;
                }
            }
        }
        return initial;
    }

2、选择排序

选择排序基本思想:第一次从 arr[0]~arr[n-1]中选取最小值, 与 arr[0]交换,第二次从 arr[1]~arr[n-1]中选取最小值,与 arr[1]交换,第三次从 arr[2]~arr[n-1]中选取最小值,与 arr[2] 交换,…,第 i 次从 arr[i-1]~arr[n-1]中选取最小值,与 arr[i-1]交换,…, 第 n-1 次从 arr[n-2]~arr[n-1]中选取最小值, 与 arr[n-2]交换,总共通过 n-1 次,得到一个按排序码从小到大排列的有序序列。

2.1 选择排序代码实现

/**
     *  选择排序算法
     *  遍历数组的所有数,将最小的放到最左边,以此类推
     * @Param initial 传入要排序的数组
     * @Return 已经排序完的数组
     */
    public static int[] choiceSort(int[] initial){
        /**
         * 假设每次遍历的第一个数就是最小的,将第一个数直接赋值给最小临时变量
         * 直接从数组的第二个数开始遍历,与最小值做比较
         * 每次比较后,将最小值的索引赋值给minIndex,minTemp用来记录最小值
         */
        //minTemp:最小值临时变量
        int minTemp;
        //记录最小值的索引
        int minIndex = 0;
        //temp做数据交换的临时变量
        int temp;
        for (int j = 0; j < initial.length - 1; j++) {
            minTemp = initial[j];
            //j+1是因为每次遍历,都会从上一次遍历出结果,并交换顺序后的下一个数开始比较
            // -j是因为每次遍历,都会比上次少遍历一个
            for (int i = j + 1; i < initial.length - 1 - j; i++) {
                if (initial[i] < minTemp){
                    minIndex = i;
                    minTemp = initial[i];
                }
            }
            //遍历完一次之后,就把这个最小值,和已经排序了的数的下一个数,两个数做交换
            //假如已经排序好了前面两个数,就把最小值的数,和第三个数做交换
            temp = initial[j];
            initial[j] = initial[minIndex];
            initial[j] = temp;
        }
        return initial;
    }

后续更新插入排序、希尔排序、快速排序、归并排序、基数排序、交换排序、堆排序,敬请期待~

免费评分

参与人数 6吾爱币 +5 热心值 +4 收起 理由
Dark_Forest + 1 多放几个撒,撸两下就没了
氖气 + 1 + 1 我很赞同!
y2003 + 1 刚好学习一下
何处不青山 + 1 + 1 用心讨论,共获提升!
aerofsm + 1 鼓励转贴优秀软件安全工具和文档!
z0000x + 1 + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

nj001 发表于 2021-3-20 22:46
(define (Merage ls0 ls1) (cond
                           ((null? ls0) ls1)
                           ((null? ls1) ls0)
                           (else (if (> (car ls0) (car ls1))
                                     (cons (car ls1) (Merage ls0 (cdr ls1)))
                                     (cons (car ls0) (Merage (cdr ls0) ls1))))))
(define (Msort ls0)
  (let* ((i (quotient (length ls0) 2)) (i1 (- (length ls0) i)))
    (cond
      ((= (length ls0) 1) ls0)
      ((= (length ls0) 2) (Merage (list (car ls0))
                                   (cdr ls0)))     
      (else (Merage (Msort (drop-right ls0 i1))
                     (Msort (drop ls0 i))
                     )))))

二路归并排序
aerofsm 发表于 2021-3-20 22:43
封狼居胥l7l 发表于 2021-3-20 22:46
dlgz 发表于 2021-3-20 23:01
经典排序算法
zdw1997 发表于 2021-3-20 23:05
谢谢大佬 学会了
goodista 发表于 2021-3-21 08:32
继续 不错
KEJIAMIAO 发表于 2021-3-21 09:06
感谢分享
IT小胡来了 发表于 2021-3-21 11:36
整理的非常好啊!
angel_bai 发表于 2021-3-21 19:15
感谢分享
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 17:44

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表