• Java-选择排序算法


    我一定要掌握一些基本的排序算法,对,没错,说到做到,今天学习了选择排序算法。

    一、算法描述

    首先找到数组中的最小的那个元素,把它和数组的第一个元素位置交换(如果第一个元素是最小元素那么它就和自己交换)。在剩下的元素中找到最小的元素,将它和第二个元素交换位置,如此重复,正道将整个元素排序完成,这种叫做选择排序,就是不断地选择剩下元素中的最小者。

    举个栗子:

    原数组:5, 2 , 9 , 6 , 3(第一趟选择最小数进行交换)

    第一趟:2, 5 , 9 , 6 , 3

    第二趟:2, 3 , 9 , 6 , 5

    第三趟:2, 3 , 5 , 6 , 9

    第四趟:2, 3 , 5 , 6 , 9

    二、算法复杂度分析

    平均时间复杂度:O(n^2)

    空间复杂度:O(1)(用于交换和记录索引)

    稳定性:不稳定(如[5 , 5 , 3]第一趟将5和3交换,倒置第一个5挪到第二个5后面)

    三、算法实现(NO BB Show Your Code)

     1 package cn.zpoor.Test;
     2 /**
     3  * @author 薛定谔的猫
     4  * 选择排序实现*/
     5 public class Selection {
     6     public static void main(String[] args) {
     7         int[] arr = {5,2,9,6,3};
     8         System.out.println("选择排序之前:");
     9         for(int num:arr) {
    10             System.out.print(num+ " ");
    11         }
    12         
    13         //选择排序的优化
    14         for(int i = 0;i<arr.length-1;i++) {
    15             int k = i;//记录值
    16             for(int j = k+1;j<arr.length;j++) {//选最小的索引值
    17                 if (arr[j]<arr[k]) {
    18                     k = j;//记录找到的最小值的索引值
    19                 }
    20             }
    21             //内层循环结束后,找到本轮最小的数之后,进行交换
    22             if (i!=k) {
    23                 //交换位置
    24                 int temp = arr[i];
    25                 arr[i] = arr[k];
    26                 arr[k] = temp;
    27             }
    28         }
    29         System.out.println();
    30         System.out.println("选择排序之后:");
    31         for(int num:arr) {
    32             System.out.print(num + " ");
    33         }
    34     }
    35 }
    36 /*
    37 选择排序之前:
    38 5 2 9 6 3 
    39 选择排序之后:
    40 2 3 5 6 9 */

    睡觉。

  • 相关阅读:
    UVa 1394 约瑟夫问题的变形
    UVa 572 油田(DFS求连通块)
    UVa 699 下落的树叶
    Prim求解最小生成树
    UVa 839 天平
    UVa 11988 破损的键盘(链表)
    UVa 442 矩阵链乘(栈)
    UVa 二叉树的编号(二叉树)
    UVa 12100打印队列(队列)
    约瑟夫圆桌问题
  • 原文地址:https://www.cnblogs.com/zpoor/p/7648430.html
Copyright © 2020-2023  润新知