zoukankan      html  css  js  c++  java
  • 选择排序

    选择排序的算法

    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()方法进行比较。

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

  • 相关阅读:
    Linux配置环境变量
    入坑CV DL一些基础技能学习
    (Linux)初探cmake .和make命令
    Django rest framework 之分页
    Django rest framework 之版本
    通用权限框架
    堡垒机
    kingadmin
    CRM 客户关系管理系统
    Torando 入门
  • 原文地址:https://www.cnblogs.com/vincentmax/p/14240906.html
Copyright © 2011-2022 走看看