排序算法【选择排序】

选择排序

原理

选择排序是比较排序的一种,它是每次从待排序的数据中找出最小或最大的数据放到前面,直到待排序的数据个数为0,

假设数据5,2,6,5,7,1,8

1、找到最小的1,和第一个位5进行交换

2、在2,6,5,7,5,8中找最小的,2,2在第二位是第二最小,待比较的数据中没有比2小的,不进行交换

3、待比较交换数据6,5,7,5,8中找到最小的,5是第三位最小的,5和6进行交换得到1,2,5,6,7,5,8

4、以此类推最终结果1,2,5,5,6,7,8

时间复杂度:O(n²)

空间复杂度:O(1)

稳定性:不稳定,假如数据5,2,3,5,7,1,8,那么第一个5会和1进行交换,变成在第二个五的后面,所以是不稳定的

示例

import java.util.Random;

/**
 * 选择排序
 *
 **/
public class SelectSortMain {
    public static void main(String[] args) {
        int len = 10;
        int[] datas = new int[len];

        Random r = new Random(0);
        for(int i = 0; i < len;i++) {
            int d = r.nextInt(100);
            datas[i] = d;
        }
        long start = System.currentTimeMillis();
        selectSort(datas);
        long spend = System.currentTimeMillis() - start;
        System.out.println("******  spend " + spend);
        for (int data:
                datas) {
            System.out.print(data + ",");
        }
    }

    public static void selectSort(int[] datas){
        int len = datas.length;
        if(len == 0){
            return;
        }
        //排序趟数
        for (int i = 0; i < len; i++) {
            int minDataIdx = i;
            //寻找最小值
            for (int currIdx = i+1; currIdx < len; currIdx++){
                //交换
                if(datas[minDataIdx] > datas[currIdx]) {
                    minDataIdx = currIdx;
                }
            }
            if(minDataIdx != i) {
                int tmp = datas[minDataIdx];
                datas[minDataIdx] = datas[i];
                datas[i] = tmp;
            }

        }
    }
}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小...
    NiceBlueChai阅读 2,166评论 0 1
  • 概述 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部...
    蚁前阅读 5,251评论 0 52
  • 选择排序(Selection sort) 选择排序是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素...
    HuFan_JS阅读 160评论 0 1
  • 选择排序算法是一种原址比较排序算法。选择排序大致的思路是找到数据结构中的最小值并将其位置放置第一位,接着找到第二小...
    DHFE阅读 274评论 0 0
  • 排序的基本概念 在计算机程序开发过程中,经常需要一组数据元素(或记录)按某个关键字进行排序,排序完成的序列可用于快...
    Jack921阅读 1,519评论 1 4