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

    08 选择排序

    准备工作

    public class SelectionSort {
        public static void main(String[] args) {
            //selection sort是选择排序的意思
              int[] a={55,77,22,44,88,-8};
            System.out.println("需要排序的原数组a如下所示:");
            for (int i = 0; i < a.length; i++) {
                System.out.print(a[i]+"	");
            }
            System.out.println();//换行
        }
    }
    
    

    A.升序

    1.思路分析:

    //核心是找最大值
    //升序思路:

        //1.找到数组当前部分的最大值的下标,并把它赋值给max_index(每次寻找前会重置为0)
        //2.把最大值与数组当前部分的最后一个元素交换
        //3.循环1,2步骤,直到最外层循环遍历结束
    

    //数组当前部分(说明)----->
    //设数组 int a[]={1,-33,44,5,7,99};
    //第一次,数组当前部分为1到99这六个元素,所以max_index=5,最后一个元素的坐标为a.length-1;
    //把a[max_index]与a[a.length-1]交换,最后一个元素已经确定
    //第二次,数组的当前部分为1到7这五个元素....................倒数第二个元素已经确定
    //第三次,数组的当前部分为1到5这四个元素
    //注意:降序部分与升序的部分的数组的当前部分是一致的

    2.核心代码

       for (int i = 0; i < a.length-1; i++) {
                //a.length-1是因为第一个数不用交换了,因为后面的数已经排好序了
                int max_index=0;//使a[max_index]为数组a的第一个元素
                for (int j = 1; j < a.length-i; j++) {
                //第一个不用比,所以默认从第二个开始比较
                    if(a[j]>=a[max_index]){
                        max_index=j;
                    }
                }
                int temp=a[max_index];
                a[max_index]=a[a.length-1-i];
                a[a.length-1-i]=temp;
            }
            //排序后(升序)的数组为:
            System.out.println("排序后的数组a(升序)如下所示");
            for (int i = 0; i < a.length; i++) {
                System.out.print(a[i]+"	");
            }
    

    3.运行截图

    B.降序

    1.思路分析:

    //核心是找最小值

    //降序思路:

               //1.找到数组当前部分的最小值的下标,并把它赋值给min_index(每次寻找前会重置为0)
             //2.把最小值与数组当前部分的最后一个元素交换
           //3.循环1,2步骤,直到最外层循环遍历结束
    

    2.核心代码:

        for (int i = 0; i < a.length-1; i++) {
                //a.length-1是因为第一个数不用交换了,因为后面的数已经排好序了
                int min_index=0;//使a[max_index]为数组a的第一个元素
                for (int j = 1; j < a.length-i; j++) {
                //第一个不用比,所以默认从第二个开始比较
                    if(a[j]<=a[min_index]){
                        min_index=j;
                    }
                }
                int temp=a[min_index];
                a[min_index]=a[a.length-1-i];
                a[a.length-1-i]=temp;
            }
            //排序后(降序)的数组为:
            System.out.println("排序后的数组a(降序)如下所示");
            for (int i = 0; i < a.length; i++) {
                System.out.print(a[i]+"	");
            }
    

    3.运行截图

  • 相关阅读:
    Codeforces Round #614 (Div. 2) D. Aroma's Search
    Codeforces Round #614 (Div. 2) C. NEKO's Maze Game
    Kruskal最小生成树及应用
    Codeforces Round #608 (Div. 2) E. Common Number
    Codeforces Round #607 (Div. 2) D Beingawesomeism
    codeforce Hello 2020 A~E
    Codeforces Round #609 (Div. 2)
    Codeforces Round #607 (Div. 2) C. Cut and Paste
    Codeforces Round #605 (Div. 3) F. Two Bracket Sequences 三维dp
    2019-2020Nowcoder Girl初赛题解
  • 原文地址:https://www.cnblogs.com/SSSzhanglingzhi/p/14035408.html
Copyright © 2011-2022 走看看