选择排序

本文介绍了两种基本排序算法——冒泡排序和选择排序,并通过Java代码实现这两种算法。冒泡排序通过不断交换相邻的未正确排序的元素来工作,而选择排序则是每次从未排序的部分找出最小元素并放到已排序部分的末尾。
冒泡排序

冒泡排序比较好理解,但是效率比较低,

冒泡排序的基本思想是:每一次将最具有特征的一个数(或者object)放到序列的最前面,或者最后面。

例如,如果需要将一组数,以从小到大的顺序排列,那么就可以设计这样的冒泡方法:可以设计从序列的最后面开始,找出序列中最小的一个数放到序列的最前面,这样经过n次循环也可以实现数组的排列。这种排序方法由于每一次找到的数字都像是气泡一样从数组里冒出来而得名为“冒泡排序”。

Java代码  收藏代码

    public void bubbleSort(int[] array) {  
            int temp;  
            // 第一层循环: 表明要比较的次数,比如list.count个数,肯定要比较count-1次  
            for (int i = 0; i < array.length - 1; i++) {  
                // list.count-1:取数据最后一个数下标,  
                // j>i: 从后往前的的下标一定大于从前往后的下标,否则就超越了。  
                for (int j = array.length - 1; j > i; j--) {  
                    // 如果前面一个数大于后面一个数则交换  
                    if (array[j - 1] > array[j]) {  
                        temp = array[j - 1];  
                        array[j - 1] = array[j];  
                        array[j] = temp;  
                    }  
                }  
            }  
        }  



选择排序

每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。





Java代码  收藏代码

    //选择排序  
        public void selectSort(int [] a) {  
            int n = a.length;  
            for(int k=0; k<n-1; k++) {  
                int min = k;  
                for(int i=k+1; i<n; i++) {  
                    if(a[i] < a[min]) {  
                        min = i;  
                    }  
                }  
                if(k != min) {  
                    int temp = a[k];  
                    a[k] = a[min];  
                    a[min] = temp;  
                }  
            }  
        }  



完整可执行代码:
Java代码  收藏代码

    package sort;  
      
    import java.util.Date;  
    import java.util.Random;  
      
    import org.junit.Test;  
      
    public class BubbleSort {  
      
        Random random = new Random();  
        int[] array = new int[2000];  
          
        public void init(int [] a) {  
            for (int j = 0; j < 2000; j++) {  
                a[j] = random.nextInt(100000);  
            }  
        }  
      
        @Test  
        public void bubbleSortTest() {  
            init(array);  
            Date dateStart = new Date();  
            bubbleSort(array);  
            Date dateEnd = new Date();  
            System.out.println("冒泡排序耗费时间:"  
                    + (dateEnd.getTime() - dateStart.getTime()));  
              
            log(array,10);  
            System.out.println("冒泡排序耗费时间:"  
                    + (dateEnd.getTime() - dateStart.getTime()));  
        }  
          
        @Test  
        public void selectSortTest() {  
            init(array);  
            Date dateStart = new Date();  
            selectSort(array);  
            Date dateEnd = new Date();  
            System.out.println("选择排序耗费时间:"  
                    + (dateEnd.getTime() - dateStart.getTime()));  
              
            log(array,10);  
            System.out.println("选择排序耗费时间:"  
                    + (dateEnd.getTime() - dateStart.getTime()));  
        }  
          
          
          
        public void log(int [] a, int top) {  
            for(int i=0; i<top; i++) {  
                System.out.print(a[i] + ",");  
            }  
        }  
      
        public void bubbleSort(int[] array) {  
            int temp;  
            // 第一层循环: 表明要比较的次数,比如list.count个数,肯定要比较count-1次  
            for (int i = 0; i < array.length - 1; i++) {  
                // list.count-1:取数据最后一个数下标,  
                // j>i: 从后往前的的下标一定大于从前往后的下标,否则就超越了。  
                for (int j = array.length - 1; j > i; j--) {  
                    // 如果前面一个数大于后面一个数则交换  
                    if (array[j - 1] > array[j]) {  
                        temp = array[j - 1];  
                        array[j - 1] = array[j];  
                        array[j] = temp;  
                    }  
                }  
            }  
        }  
        //选择排序  
        public void selectSort(int [] a) {  
            int n = a.length;  
            for(int k=0; k<n-1; k++) {  
                int min = k;  
                for(int i=k+1; i<n; i++) {  
                    if(a[i] < a[min]) {  
                        min = i;  
                    }  
                }  
                if(k != min) {  
                    int temp = a[k];  
                    a[k] = a[min];  
                    a[min] = temp;  
                }  
            }  
        }  
      

    }


jiaozhiguang-126-com.iteye.com/blog/1679040

传送带损坏与对象检测数据集 一、基础信息 • 数据集名称:传送带损坏与对象检测数据集 • 图片数量: 训练集:645张图片 验证集:185张图片 测试集:92张图片 总计:922张工业监控图片 • 训练集:645张图片 • 验证集:185张图片 • 测试集:92张图片 • 总计:922张工业监控图片 • 分类类别: Hole(孔洞):传送带表面的孔洞损坏。 Human(人类):工作区域中的人类,用于安全监控。 Other Objects(其他对象):非预期对象,可能引起故障。 Puncture(刺穿):传送带被刺穿的损坏。 Roller(滚筒):传送带滚筒部件。 Tear(撕裂):传送带撕裂损坏。 impact damage(冲击损坏):由于冲击导致的损坏。 patch work(修补工作):已修补的区域。 • Hole(孔洞):传送带表面的孔洞损坏。 • Human(人类):工作区域中的人类,用于安全监控。 • Other Objects(其他对象):非预期对象,可能引起故障。 • Puncture(刺穿):传送带被刺穿的损坏。 • Roller(滚筒):传送带滚筒部件。 • Tear(撕裂):传送带撕裂损坏。 • impact damage(冲击损坏):由于冲击导致的损坏。 • patch work(修补工作):已修补的区域。 • 标注格式:YOLO格式,包含边界框和类别标签,适用于目标检测任务。 • 数据格式:图像数据来源于工业监控系统,适用于计算机视觉分析。 二、适用场景 • 工业自动化检测系统开发:用于构建自动检测传送带损坏和异物的AI模型,实现实时监控和预防性维护,减少停机时间。 • 安全监控应用:识别人类和其他对象,提升工业环境的安全性,避免事故和人员伤害。 • 学术研究与创新:支持计算机视觉在制造业、物流和自动化领域的应用研究,促进AI技术与工业实践的融合。 • 教育与培训:可用于培训AI模型或作为工业工程和自动化教育的案例数据,帮助学习者理解实际应用场景。 三、数据集优势 • 多样化的类别覆盖:包含8个关键类别,涵盖多种损坏类型和对象,确保模型能够处理各种实际工业场景,提升泛化能力。 • 精准的标注质量:采用YOLO格式,边界框标注准确,由专业标注人员完成,保证数据可靠性和模型训练效果。 • 强大的任务适配性:兼容主流深度学习框架(如YOLO、TensorFlow、PyTorch),可直接用于目标检测任务,并支持扩展至其他视觉任务需求。 • 突出的工业价值:专注于工业传送带系统的实际需求,帮助提升生产效率、降低维护成本,并增强工作场所安全,具有较高的实际应用价值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值