数据结构 07 - 冒泡排序 && 选择排序

一、冒泡排序

1.基本思想

2.将数组第一个数与其后面的数依次比较

(1)如果大于,就与该数的的值互换
(2)如果小于,则不变
(3)最终数组第一个数就是最小的数了

3.重复第一步骤,将第二个数与其后面的数进行比较

(1)需要重复arr.length - 1轮的比较
(2)每一轮都确定了第 i 个位置的值

代码实现:

    public static void BubbleSort(int[] sort){
        boolean flag = false;//判断flag
       
        for (int i = 0; i < sort.length - 1; i++) {
            for (int j = i; j < sort.length; j++) {//该层循环结束就确定了第i个位置的值
                if (sort[i] > sort[j]) {
                    flag = true;
                    int temp = sort[j];
                    sort[j] = sort[i];
                    sort[i] = temp;
                }
            }
            System.out.println("第" + i + "趟排序结果:");
            for (int k = 0; k < sort.length; k++) {
                System.out.print(sort[k] + "\t");
            }
            System.out.println();
            if (flag == false) {//说明在第i次循环时,没有发生过交换
                break;
            }
        }
}

二、选择排序

在这里插入图片描述
1.思路分析
(1)首先确定需要进行arr.length - 1轮选择
(2)每一轮确定一个最小值,然后将其赋给数组的相应位置

代码实现:

public class SelectionSort {
    public static void main(String[] args) {
        int[] arr = new int[]{1,3,2,7,5,-1,0,89,13,24,45,33};
        SelectionSort(arr);
        System.out.println(Arrays.toString(arr));

        //创建一个80000个数的随机数组
        int[] ran = new int[80000];
        for (int i = 0; i < ran.length; i++) {
            ran[i] = (int)(Math.random() * 800000);
        }

        Date date1 = new Date();
        SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//格式化
        String date1Str = simpleDateFormat1.format(date1);
        System.out.println("排序前的时间:" + date1Str);

        SelectionSort(ran);

        Date date2 = new Date();
        SimpleDateFormat simpleDateFormat2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//格式化
        String date2Str = simpleDateFormat2.format(date2);
        System.out.println("排序后的时间:" + date2Str);
    }
    public static void SelectionSort(int[] arr){
        for (int i = 0; i < arr.length - 1; i++) {
            int min = arr[i];
            int minIndex = i;
            for (int j = i + 1; j < arr.length; j++) {
               if(min > arr[j]){
                   min = arr[j];
                   minIndex = j;
               }
            }
            //arr[0] = min,但是在此之前要把arr[0]给保留住,因为这个数还要进行接下来的比较
            arr[minIndex] = arr[i];
            arr[i] = min;
        }
//        for (int i = 0; i < arr.length; i++) {
//            System.out.print(arr[i] + "\t");
//        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值