码迷,mamicode.com
首页 > 编程语言 > 详细

十大经典排序算法-选择排序

时间:2021-02-15 12:00:11      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:pre   图片   依次   选择排序   system   alt   时间复杂度   creat   算法   

一、算法步骤

首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置。再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。重复第二步,直到所有元素均排序完毕。

技术图片

2、时间复杂度

 O(n2) 的时间复杂度

3、代码实现

import java.util.Arrays;

/**
 * Created with IntelliJ IDEA.
 * User: Andrew
 * Date: 2021/02/10
 * Time: 19:49
 * Description: No Description
 */
public class SelectSort {
    public static void main(String[] args) {
        int[] arr = new int[]{3,4,5,7,1,2,0,3,6,8};
        // 排序前数组
        System.out.println(Arrays.toString(arr));
        selectSort(arr);
        // 排序后的数组
        System.out.println(Arrays.toString(arr));
    }
    public static void selectSort(int[] arr){
        // 遍历所有的数
        for (int i = 0; i < arr.length; i++) {
            int minIndex=i;
            // 把当前遍历的数和后面所有的数依次进行比较,并把记录最小的数的下标
            for (int j = i + 1; j < arr.length; j++) {
                // 如果后面比较的数比记录的最小的数小
                if (arr[minIndex] > arr[j]){
                    // 记录最小的那个数的下标
                    minIndex = j;
                }
            }
            // 如果最小的数和当前遍历的下标不一致,说明下标为minIndex的数比当前遍历的数更小
            if (i != minIndex){
                int temp = arr[i];
                arr[i] = arr[minIndex];
                arr[minIndex] = temp;
            }
        }
    }
}

 

/**
 * Created with IntelliJ IDEA.
 * User: Andrew
 * Date: 2021/02/10
 * Time: 19:59
 * Description: No Description
 */

/**
 * 选择排序:
 * 本质:
 * 1. 首先选择第 1 个数为最小的数, 然后让这个数和后面所有的数比较,
 * 2、一轮下来找到最小的数, 然后把最小的放在第 1 个位置
 * 3、再选择第 2 个数为第 2 小的数, 再后面逐次比较,.......
 */
object SelectSortDemo {
  def swap(array: Array[Int],index1:Int,index2:Int): Unit ={
    val temp = array(index1)
    array(index1) = array(index2)
    array(index2) = temp
  }

  def main(args: Array[String]): Unit = {
    val array = Array(5, 7, 2, 9, 4, 1, 0, 5, 7)
    println(array.toBuffer)
    selectSortDemo(array)
    println(array.toBuffer)
  }

  def selectSortDemo(arr: Array[Int]): Unit = {
    // 一共 len 个元素, 只需要找到 len-1 个就可以了, 剩下一个位置自动正确
    for (i <- 0 until arr.length - 1) {
      // 选中第 i 个元素为第 i 小(只记录索引即可, 成功之后交换一次元素即可)
      var minIndex: Int = i
      // 让第 i 个元素, 逐次与 i + 1 位置元素比较
      for (j <- i + 1 until arr.length) {
        // 如果有比 minIndex 的位置更小的元素, 就记录下新的索引
        if (arr(j) < arr(minIndex)) minIndex = j;

        //把 i 位置和 minIndex 位置的元素交换
        if (i != minIndex) {
          swap(arr,i,minIndex)
        }
      }
    }
  }
}

  

 

十大经典排序算法-选择排序

标签:pre   图片   依次   选择排序   system   alt   时间复杂度   creat   算法   

原文地址:https://www.cnblogs.com/andrew037/p/14396546.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!