• 选择排序


    选择排序的算法

    1) 整个数列分成两部分:前面是有序数列,后面是无序数列

    2) 初始状态下,整个数列都是无序的,有序数列是空

    3) 一共n个数,需要n-1趟循环(一趟都不能少)

    4) 每比较完一趟,有序数列数量+1,无序数列数量-1

    5) 每趟先假设无序数列的第1个元素(整个数列的第i个元素)是最小的,让当前的最小数,从第i+1个元素开始比较,一直比较到最后一个元素。如果发现更小的数,就假设当前数是最小数。

    6) 一趟比较完后,将发现最小数和无序数列的第一个数交换(如果最小数不是无序数列的第一个数)

     

    实现

    import java.util.Arrays;
    import java.util.jar.JarEntry;
    
    public class slelectsort {
    
        public static void main(String[] args) {
            int[] arr= {75,87,56,45,89,100,76,34,89,97};
    
            //排序前输出
            System.out.println(Arrays.toString(arr));
    
            //冒泡排序
    
            for (int i=0;i<arr.length-1;i++){
               //1.假设第一个无序数列第一个数是最小的
                int minIndex=i;
                //2.小循环
                for(int j=i+1;j<arr.length;j++){
                    if(arr[minIndex]>arr[j]){
                        minIndex=j;
                    }
                }
                //3.判断minIndex是否变化,如果变化了就说明数列第一个不是最小的,就交换
                if(minIndex!=i){
                    int temp=arr[minIndex];
                    arr[minIndex]=arr[i];
                    arr[i]=temp;
                }
    
    
            }
    
            //输出排序后
            System.out.println("排序后");
            System.out.println(Arrays.toString(arr));
    
        }
    }

     冒泡排序最多需要n-1趟循环,最少1趟循环;选择排序必须进行n-1趟循环,一趟也不能少

     冒泡排序中最多的操作就是比较和交换,一趟循环中可能发生多次交换;而选择排序中最多的操作是比较,一趟比较结束后如果发现更小的值才交换一次。

     如果数组元素不是基本数据类型,而是对象,应该如何判断大小呢?可以让相应类实现Comparable接口并调用comparTo()方法进行比较。

     快速排序是冒泡排序的完善版,都是基于交换的排序,是各种基于比较的排序算法中效率最高的,用到了分治和递归的思想。

  • 相关阅读:
    Java学习笔记七:Java的流程控制语句之switch
    Java学习笔记六:Java的流程控制语句之if语句
    Java学习笔记五:Java中常用的运算符
    如何在linux下使用git管理上传代码&误删文件修复
    pwnable.tw applestore 分析
    pwnable.tw dubblesort 分析
    word中如何只修改英文的颜色
    word中图片遮挡文字怎么办
    angr进阶(6)绕过反调试
    angr进阶(5)内存操作
  • 原文地址:https://www.cnblogs.com/vincentmax/p/14240906.html
Copyright © 2020-2023  润新知