逸帅 发表于 2021-3-20 22:36

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

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

## 1、冒泡排序

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

## 1.1冒泡排序代码实现

```java
                //冒泡排序算法
    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 > initial){
                  //从小到大排序
                  temp = initial;
                  initial = initial;
                  initial = temp;
                }
            }
      }
      return initial;
    }
```

## 2、选择排序

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

## 2.1 选择排序代码实现

```java
/**
   *选择排序算法
   *遍历数组的所有数,将最小的放到最左边,以此类推
   * @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+1是因为每次遍历,都会从上一次遍历出结果,并交换顺序后的下一个数开始比较
            // -j是因为每次遍历,都会比上次少遍历一个
            for (int i = j + 1; i < initial.length - 1 - j; i++) {
                if (initial < minTemp){
                  minIndex = i;
                  minTemp = initial;
                }
            }
            //遍历完一次之后,就把这个最小值,和已经排序了的数的下一个数,两个数做交换
            //假如已经排序好了前面两个数,就把最小值的数,和第三个数做交换
            temp = initial;
            initial = initial;
            initial = temp;
      }
      return initial;
    }
```

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

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

{:1_918:}继续 不错

KEJIAMIAO 发表于 2021-3-21 09:06

感谢分享

IT小胡来了 发表于 2021-3-21 11:36

整理的非常好啊!

angel_bai 发表于 2021-3-21 19:15

感谢分享
页: [1] 2
查看完整版本: 排序算法----冒泡和选择排序