java算法 — 数组的简单排序

下面讲解 冒泡法 和 选择法排序,,,忽略掉插入法排序,因为插入法排序和冒泡差不多且不好理解。

 

1.冒泡法,这个是最基本的排序算法,不说那么多 ,直接上源码:

package ch01;

import java.util.Scanner;

/**
 * 冒泡法排序
 */
public class Bubbling {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        long[] arr = new long[10];
        for (int i = 0; i < arr.length; i++) {
            arr[i] = sc.nextLong();
        }
        sort(arr);
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }
    }

    /**
     * 冒泡 - 尾部往前冒。
     * @param arr
     */
    public static void sort(long[] arr) {
        long t = 0;
        for(int i = 0;i < arr.length - 1; i++){
             for (int j = arr.length - 1;j > i; j--){
                if (arr[j] <  arr[j - 1]){
                    //交换
                    t = arr[j];
                    arr[j] = arr[j-1];
                    arr[j-1] = t;
                }
             }
        }
    }
}
冒泡排序

 

2.选择法排序是有 i j k ,,其中i 做外循环,j是 内循环变量, k 是标识,总是指向  最小(大) 的值。

源码:

package ch01;

/**
 * 选择排序法
 * 比 冒泡排序 交换的次数少  因此效率比冒泡高那么一点
 */
public class Select {
    public static void main(String[] args) {

        long[] arr = {3, 7, 5, 8, 4, 2, 1, 6, 9, 10}; //10个数据
        sort(arr);
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }
    }


    public static void sort(long[] arr) {
        int k = 0;
        long temp = 0L;
        for (int i = 0; i < arr.length - 1; i++) {
            //外循环初始 k = i
            k = i;
            // 【j = i + 1】 少比较 1 次
            for (int j = i + 1; j < arr.length; j++) {

/**
 *          是在不懂请打开这个注释!!
 *                 System.out.println("arr[i]" + arr[i]);
 *                 System.out.println("arr[j]" + arr[j]);
 *                 System.out.println("arr[k]" + arr[k]);
 *                 System.out.println("==================");
 */

                //j是会变的
                if (arr[j] < arr[k]) {
                    //那么k指向的是最小的值
                    k = j;
                }
            }

            //内循环结束 - 交换最小值
            temp = arr[i];
            arr[i] = arr[k];
            arr[k] = temp;
        }
    }
}
选择法排序

实在看不懂打开里面的注释即可。

posted @ 2021-11-09 15:07  咸瑜  阅读(99)  评论(0编辑  收藏  举报