zoukankan      html  css  js  c++  java
  • Java排序算法之选择排序

    一、算法原理

      简单选择排序的基本思想:给定数组:int[] arr={里面n个数据};第1趟排序,在待排序数据arr[1]~arr[n-1]中选出最小的数据,将它与arrr[0]交换;第2趟,在待排序数据arr[2]~arr[n-1]中选出最小的数据,将它与r[1]交换;以此类推,第i趟在待排序数据arr[i]~arr[n-1]中选出最小的数据,将它与r[i-1]交换,直到全部排序完成。

    二、算法举例 

      数组 int[] arr={5,2,8,4,9,1};

    -------------------------------------------------------

      第一趟排序: 原始数据:5  2  8  4  9  1

      最小数据1,把1放在首位,也就是1和5互换位置,

      排序结果:1  2  8  4  9  5

    -------------------------------------------------------

      第二趟排序:

      第1以外的数据{2  8  4  9  5}进行比较,2最小,

      排序结果:1  2  8  4  9  5

    -------------------------------------------------------

      第三趟排序:

      除1、2以外的数据{8  4  9  5}进行比较,4最小,8和4交换

      排序结果:1  2  4  8  9  5

    -------------------------------------------------------

      第四趟排序:

      除第1、2、4以外的其他数据{8  9  5}进行比较,5最小,8和5交换

      排序结果:1  2  4  5  9  8

    -------------------------------------------------------

      第五趟排序:

      除第1、2、4、5以外的其他数据{9  8}进行比较,8最小,8和9交换

      排序结果:1  2  4  5  8  9

    -------------------------------------------------------

      外层循环次数为N-1;内层循环从i+1开始,到N-1结束。每一趟排序获得最小数的方法:for循环进行比较,定义一个变量temp,首先前两个数比较,把较小的数放在temp中,然后用temp再去跟剩下的数据比较,如果出现比temp小的数据,就用它代替temp中原有的数据。

    三、算法时间复杂度

      选择排序的时间复杂度:简单选择排序的比较次数与序列的初始排序无关。 假设待排序的序列有 N 个元素,则比较次数永远都是N (N - 1) / 2。

      所以,综上,简单排序的时间复杂度为 O(N2)

    四、算法实现

      

     1 package recursion;
     2 
     3 import java.util.Arrays;
     4 
     5 /**
     6  * @author zsh
     7  * @company wlgzs
     8  * @create 2019-02-17 8:47
     9  * @Describe 选择排序算法实现
    10  */
    11 public class SelectionSort {
    12 
    13     /**
    14      * 选择排序
    15      * @param arr 待排序的数组
    16      * @return 已排序的数组
    17      */
    18     static int[] selectionSort(int[] arr){
    19         for (int i = 0; i < arr.length-1; i++) {
    20             int k = i;
    21             for (int j = i + 1; j < arr.length ; j++) {
    22                 if (arr[j] < arr[k]){
    23                     //记录此时找到最小值的位置
    24                     k = j;
    25                 }
    26             }
    27             //内层循环结束,找到最小值后进行交换
    28             if (i != k){
    29                 int temp = arr[i];
    30                 arr[i] = arr[k];
    31                 arr[k] = temp;
    32             }
    33         }
    34         return arr;
    35     }
    36 
    37     public static void main(String[] args) {
    38         int[] arr = new int[]{5,2,8,4,9,1};
    39         System.out.println(Arrays.toString(selectionSort(arr)));
    40     }
    41 }
  • 相关阅读:
    调试技术能够让新技术的学习事半功倍
    世界500强绩效考核(KPI) [11]
    .NET 4.0新功能介绍:In Process Side By Side
    What's New in the .NET Framework Version 4
    Production Debugging for .NET Framework Applications
    Project 2007下的自动计算问题
    SQL操作全集
    WPF1.1 理解Windows图形
    .NET Framework Version 4 Application Compatibility Walkthrough
    Fixing BizTalk ENTSSO Failure on Windows 7, Vista or Server 2008 after .NET 4.0 Installation
  • 原文地址:https://www.cnblogs.com/zsh-blogs/p/10390154.html
Copyright © 2011-2022 走看看