欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

冒泡排序和选择排序原理及代码实现

程序员文章站 2022-03-24 15:41:14
...


冒泡排序

/**
 * 冒泡排序原理:数组中参与比较的元素交换位置不是都有意义,交换次数多
 * 例如数组 int arr[] = {5,4,9,10,6};
 * 使用循环语句,每次循环将数组下标为0的元素,和右边相邻的元素进行比较,如果比右边的元素大则交换位置,否则不交换,
 * 按照顺序往后比较,每次循环取出最大的元素,放到最右边,像气泡一样冒出来,同时比较次数减一,因为每次产生的最大值没必要在进行比较;
 * <p>
 * 原始数据: 5,4,9,10,6
 * 第一次循环:参与比较的数据:5,4,9,10,6
 * 4,5,9,10,6 (5和4比较,5>4,交换位置)
 * 4,5,9,10,6 (5和9比较,5<9,不交换位置)
 * 4,5,9,10,6 (9和10比较,9<10,不交换位置)
 * 4,5,9,6,10 (10和6比较,10>6,交换位置)
 * <p>
 * 第二次循环:参与比较的数据:5,4,9,6
 * 4,5,9,6 (4和5比较,4<5,不交换位置)
 * 4,5,9,6 (5和9比较,5<9,不交换位置)
 * 4,5,6,9 (9和6比较,9>6,交换位置)
 * <p>
 * 第三次循环:参与比较的数据:4,5,6
 * 4,5,6 (4和5比较,4<5,不交换位置)
 * 4,5,6 (5和6比较,5<6,不交换位置)
 * <p>
 * 第四次循环:参与比较的数据:4,5
 * 4,5 (4和5比较,4<5,不交换位置)
 */
public class BubbleSort {
    public static void main(String[] args) {
        int arr[] = {5, 4, 9, 10, 6};
        print(arr);

        for (int i = arr.length - 1; i > 0; i--) {//循环次数
            int temp = 0;
            for (int y = 0; y < i ; y++) {//比较
                if (arr[y] > arr[y + 1]) {//交换位置
                    temp = arr[y];
                    arr[y] = arr[y + 1];
                    arr[y + 1] = temp;
                }
            }
        }
        print(arr);
    }

    //遍历数组
    public static void print(int arr[]) {
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + "  ");
        }
        System.out.println();
    }
}


选择排序

**
 * 选择排序原理:数组中参与比较的元素交换位置都有意义,交换次数少
 * 例如数组 int arr[] = {5,4,9,10,6};
 * 使用循环语句,从下标为0的元素开始,和右边相邻的元素进行比较,如果比右边的元素大则下标为0的元素
 * 按照顺序往后比较,每次循环取出最小的元素,和下标为0的元素交换位置,同时比较次数减一,因为每次产生的最小值没必要在进行比较,
 * 下个循环比较从下标为1的元素开始比较;
 * <p>
 * 原始数据: 5,4,9,10,6
 * 第一次循环:参与比较的数据:5,4,9,10,6
 * 4,5,9,10,64最小,45交换位置)【0】下标
 *
 * <p>
 * 第二次循环:参与比较的数据:5,9,10,6
 * 5,9,10,65最小,不交换位置)【1】下标
 *
 * <p>
 * 第三次循环:参与比较的数据:9,10,6
 * 69,106最小,69交换位置)【2】下标
 *
 * <p>
 * 第四次循环:参与比较的数据:9,10
 * 9,109最小,不交换位置)【3】下标
 */
public class SelectSort {
    public static void main(String[] args) {
        int arr[] = {5, 4, 9, 10, 6};
        print(arr);
        for (int i = 0; i < arr.length - 1; i++) {
            //假设i下标元素最小
            int min = i;
            for (int j = i + 1; j < arr.length; j++) {
                if (arr[min] > arr[j]) {
                    min = j;//最终取得最小元素的下标
                }
            }
            if (min != i) {//假设下标i不是最小的
                //交换位置
                int temp;
                temp = arr[i];
                arr[i] = arr[min];
                arr[min] = temp;
            }
        }
        print(arr);
    }

    //遍历数组
    public static void print(int arr[]) {
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + "  ");
        }
        System.out.println();
    }
}

相关标签: 笔记 总结