排序(冒泡/选择/插入)

冒泡排序(稳定)

稳定性:指排序序列中相同数据在排序后顺序是否改变,不改变为稳定,改变为不稳定


排序规则

相邻元素两两比较,大的往后排,直到一轮比较结束,最大值出现在下标最大处(升序);往复执行排序完成为止;共循环(arr.length-1)次。


基本类型比较 :

public class test{
    public static void main(){
        int [] arr = {23,12,4,25,9,2,45};
        //i表示比较的轮数
        for(int i = 0;i <arr.length-1;i++){
            //j表示数组元素下标
            for(int j = 0;j < arr.length-1-i;j++){
                //如果前一个元素大于下一元素 交换
                if(arr[j] > arr[j+1]){
                    int temp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = temp;
                }
            }
        }
        System.out.println(Arrays.toString(arr));
    }
}

                    

引用类型比较:引用类型通过比较器进行比较  arr[j].compareTo(arr[j+1])


选择排序(不稳定)


排序规则

第一次从待排序部分选择出最小值/最大值,放置在序列起始位置,再从未排序部分选择出最小值/最大值,放到已排序序列的末尾位置,直到排序完成。


        //选择排序(升序)
        int [] a = {2,6,1,45,8,34,45,8,9};
        //最小值对应下表
        int min;
        //对下标为i位置求最小值
        for(int i = 0;i <a.length-1;i++){
            min = i;
            //将后续元素值均与min位置的值进行比较
            for(int j = i+1;j <a.length;j++){
                if(a[min] > a[j]){
                    min = j;
                }
            }
            //将min位置的值与i位置的值交换
            if(min != i){
                int temp = a[i];
                a[i] = a[min];
                a[min] = temp;
            }
        }
        System.out.println(Arrays.toString(a));

插入排序(稳定)


排序规则

将序列分为已排序部分和未排序部分,遍历未排序部分,将遍历到的元素插入已排序部分正确的位置。(排序开始之前,第一个元素即为已排序部分)


        int [] a = {7,4,2,9,1,7,9};
        //对未排序部分进行遍历
        for(int i = 1;i < a.length;i++){
            //j表示被比较交换的元素实时下标
            for(int j = i;j > 0;j--){
                //从已排序序列最后一个元素开始往前比较
                if(a[j] < a[j-1]){
                    int temp = a[j-1];
                    a[j-1] = a[j];
                    a[j] = temp;
                }
            }
        }
        System.out.println(Arrays.toString(a));

性能:插入>选择>冒泡 约为1:3:4  System.currentTimeMillis()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值