Java编程-基本排序算法

冒泡排序

图解 

                                                        (注:图片来源网络)

Java代码

package suanfa_Ja;

import org.apache.hadoop.security.SaslOutputStream;

// 基本排序算法,冒泡排序 时间复杂度 O(n^2) 空间复杂度O(1)
public class BubbleSort {
    public static void bubbleSort(int[] data) {
        System.out.println("开始排序");
        int arrayLength = data.length;

        for (int i = 0; i < arrayLength - 1; i++){
            boolean flag = false;

            for (int j = 0; j < arrayLength - 1 - i; j++){
                if (data[j] > data[j + 1]){
                    int tmp = data[j + 1];
                    data[j + 1] = data[j];
                    data[j] = tmp;
                    flag = true;

                }
            }
            System.out.println(java.util.Arrays.toString(data));
            if (!flag)
                break;
        }
    }

    public static void main(String[] args) {
        int[] data = {12,4,5,-12,23,66,89,11,4,99};
        System.out.println("排序前:\n" + java.util.Arrays.toString(data));

        bubbleSort(data);

        System.out.println("排序后:\n" + java.util.Arrays.toString(data));

    }
    
}


//做了优化后的代码
// 添加一个标志位来记录每次内循环是否有交换操作,如果没有交换操作说明已经有序,可以提前结束排序。
//内循环的终止条件可以根据已经经过的轮数来确定,每一轮外循环都会将最大的元素放到最后,所以
//内循环的比较次数可以逐轮减少。
//添加一个判断数组是否为空或长度为1的情况,这种情况下数组已经是有序的,不需要进行排序。
package com.example;
public class BubbleSort {
    public static void bubbleSort(int[] data) {
        if (data == null || data.length <= 1) {
            return;
        }
        System.out.println("开始排序");
        int arrayLength = data.length;
        for (int i = 0; i < arrayLength - 1; i++) {
            boolean flag = false;
            for (int j = 0; j < arrayLength - 1 - i; j++) {
                if (data[j] > data[j + 1]) {
                    int tmp = data[j + 1];
                    data[j + 1] = data[j];
                    data[j] = tmp;
                    flag = true;
                }
            }
            System.out.println(java.util.Arrays.toString(data));
            if (!flag) {
                break;
            }
        }
    }
    public static void main(String[] args) {
        int[] data = {12, 4, 5, -12, 23, 66, 89, 11, 4, 99};
        System.out.println("排序前:\n" + java.util.Arrays.toString(data));
        bubbleSort(data);
        System.out.println("排序后:\n" + java.util.Arrays.toString(data));
    }
}

代码运行结果:

D:\Java\jdk1.8.0_131\bin\java.exe "-javaagent:D:\idea\IntelliJ IDEA 2021.1.3\lib\idea_rt.jar=51381:D:\idea\IntelliJ IDEA 2021.1.3\bin" -Dfile.encoding=UTF-8 -classpath "D:\idea\IntelliJ IDEA 2021.1.3\lib\idea_rt.jar" com.intellij.rt.execution.CommandLineWrapper C:\Users\Administrator\AppData\Local\Temp\idea_classpath1494763510 suanfa_Ja.BubbleSort
排序前:
[12, 4, 5, -12, 23, 66, 89, 11, 4, 99]
开始排序
[4, 5, -12, 12, 23, 66, 11, 4, 89, 99]
[4, -12, 5, 12, 23, 11, 4, 66, 89, 99]
[-12, 4, 5, 12, 11, 4, 23, 66, 89, 99]
[-12, 4, 5, 11, 4, 12, 23, 66, 89, 99]
[-12, 4, 5, 4, 11, 12, 23, 66, 89, 99]
[-12, 4, 4, 5, 11, 12, 23, 66, 89, 99]
[-12, 4, 4, 5, 11, 12, 23, 66, 89, 99]
排序后:
[-12, 4, 4, 5, 11, 12, 23, 66, 89, 99]

Process finished with exit code 0

二分查找法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值