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

    <<<<<<<<<<<<--------->>>>>>>>>>>>>>>>

    选择排序是一种简单直观的排序算法,而且它不会占用额外的内存空间。

      原理:遍历元素找到一个最小或最大的元素,把它放在第一个位置,然后再从剩余的元素中找到最小或最大的元素,把它放在第二个位置,依次下去,直到完成排序。

      时间复杂度为O(n2)

      思路:

        给定一个数组 s[]

        第一趟排序,在待排序的n个元素中选出最小的一个,将它与s[1]交换;

        第二趟排序,在剩下的待排序元素s[2]~s[n]中选出最小的一个数据,将它与s[2]交换;

        ...

        以此类推

        第n-1趟排序,在待排序的s[n-1]~s[n]中选出最小的数据,将它与s[n-1]交换

        排序完成。

      动图演示效果:

      Java代码实现:

     1 public class SelectionSort {
     2     public static void main(String[] args) {
     3         int[] arr = new int[] { 5, 3, 6, 2, 10, 2, 1 };
     4         selectSort(arr);
     5         for (int i = 0; i < arr.length; i++) {
     6             System.out.print(arr[i] + " ");
     7         }
     8     }
     9     public static void selectSort(int[] arr) {
    10         for (int i = 0; i < arr.length - 1; i++) {
    11             int minIndex = i;     // 用来记录最小值的索引位置,默认值为i
    12             for (int j = i ; j < arr.length; j++) {
    13                 if (arr[j] < arr[minIndex]) {
    14                     minIndex = j;     // 遍历 i~length 的值,找到其中最小值的位置
    15                 }
    16             }
    17             if (i != minIndex) {     // 交换当前索引 i 和最小值索引 minIndex 两处的值
    18                 int temp = arr[i];
    19                 arr[i] = arr[minIndex];
    20                 arr[minIndex] = temp;
    21             }      // 执行完一次循环,当前索引 i 处的值为最小值,直到循环结束即可完成排序
    22         }
    23     }
    24 }
  • 相关阅读:
    Floyd_Warshall算法
    Bellman_Ford算法
    深度优先搜索
    广度优先搜索
    贪心算法_活动选择
    动态规划_0-1背包问题
    算法导论_动态规划_最长回文子序列
    算法导论_动态规划_最长公共子序列
    动态规划解决分割问题
    2016 Google中国开发者大会游记
  • 原文地址:https://www.cnblogs.com/HuiH/p/11665410.html
Copyright © 2011-2022 走看看