更多精彩内容,欢迎关注:

视频号
视频号

抖音
抖音

快手
快手

微博
微博

直接选择排序

文档

直接选择排序

选择排序是一种简单直观的排序算法,无论什么数据进去都是 O(n?) 的时间复杂度。所以用到它的时候,数据规模越小越好。唯一的好处可能就是不占用额外的内存空间。
推荐度:
导读选择排序是一种简单直观的排序算法,无论什么数据进去都是 O(n?) 的时间复杂度。所以用到它的时候,数据规模越小越好。唯一的好处可能就是不占用额外的内存空间。
.example-btn{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.example-btn:hover{color:#fff;background-color:#47a447;border-color:#398439}.example-btn:active{background-image:none}div.example{width:98%;color:#000;background-color:#f6f4f0;background-color:#d0e69c;background-color:#dcecb5;background-color:#e5eecc;margin:0 0 5px 0;padding:5px;border:1px solid #d4d4d4;background-image:-webkit-linear-gradient(#fff,#e5eecc 100px);background-image:linear-gradient(#fff,#e5eecc 100px)}div.example_code{line-height:1.4em;width:98%;background-color:#fff;padding:5px;border:1px solid #d4d4d4;font-size:110%;font-family:Menlo,Monaco,Consolas,"Andale Mono","lucida console","Courier New",monospace;word-break:break-all;word-wrap:break-word}div.example_result{background-color:#fff;padding:4px;border:1px solid #d4d4d4;width:98%}div.code{width:98%;border:1px solid #d4d4d4;background-color:#f6f4f0;color:#444;padding:5px;margin:0}div.code div{font-size:110%}div.code div,div.code p,div.example_code p{font-family:"courier new"}pre{margin:15px auto;font:12px/20px Menlo,Monaco,Consolas,"Andale Mono","lucida console","Courier New",monospace;white-space:pre-wrap;word-break:break-all;word-wrap:break-word;border:1px solid #ddd;border-left-width:4px;padding:10px 15px}

排序算法是《数据结构与算法》中最基本的算法之一。排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。常见的内部排序算法有:插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。以下是选择排序算法:

选择排序是一种简单直观的排序算法,无论什么数据进去都是 O(n?) 的时间复杂度。所以用到它的时候,数据规模越小越好。唯一的好处可能就是不占用额外的内存空间了吧。

1. 算法步骤

首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置。

再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。

重复第二步,直到所有元素均排序完毕。

2. 动图演示

代码实现JavaScript 代码实现实例 function selectionSort(arr) {    var len = arr.length;    var minIndex, temp;    for (var i = 0; i < len - 1; i++) {        minIndex = i;        for (var j = i + 1; j < len; j++) {            if (arr[j] < arr[minIndex]) {     // 寻找最小的数                minIndex = j;                 // 将最小数的索引保存            }        }        temp = arr[i];        arr[i] = arr[minIndex];        arr[minIndex] = temp;    }    return arr;}Python 代码实现实例 def selectionSort(arr):    for i in range(len(arr) - 1):        # 记录最小数的索引        minIndex = i        for j in range(i + 1, len(arr)):            if arr[j] < arr[minIndex]:                minIndex = j        # i 不是最小数时,将 i 和最小数进行交换        if i != minIndex:            arr[i], arr[minIndex] = arr[minIndex], arr[i]    return arrGo 代码实现实例 func selectionSort(arr []int) []int {        length := len(arr)        for i := 0; i < length-1; i++ {                min := i                for j := i + 1; j < length; j++ {                        if arr[min] > arr[j] {                                min = j                        }                }                arr[i], arr[min] = arr[min], arr[i]        }        return arr}Java 代码实现实例 public class SelectionSort implements IArraySort {    @Override    public int[] sort(int[] sourceArray) throws Exception {        int[] arr = Arrays.copyOf(sourceArray, sourceArray.length);        // 总共要经过 N-1 轮比较        for (int i = 0; i < arr.length - 1; i++) {            int min = i;            // 每轮需要比较的次数 N-i            for (int j = i + 1; j < arr.length; j++) {                if (arr[j] < arr[min]) {                    // 记录目前能找到的最小值元素的下标                    min = j;                }            }            // 将找到的最小值和i位置所在的值进行交换            if (i != min) {                int tmp = arr[i];                arr[i] = arr[min];                arr[min] = tmp;            }        }        return arr;    }}PHP 代码实现实例 function selectionSort($arr){    $len = count($arr);    for ($i = 0; $i < $len - 1; $i++) {        $minIndex = $i;        for ($j = $i + 1; $j < $len; $j++) {            if ($arr[$j] < $arr[$minIndex]) {                $minIndex = $j;            }        }        $temp = $arr[$i];        $arr[$i] = $arr[$minIndex];        $arr[$minIndex] = $temp;    }    return $arr;}C 语言实例 void swap(int *a,int *b) //交換兩個變數{    int temp = *a;    *a = *b;    *b = temp;}void selection_sort(int arr[], int len) {    int i,j;        for (i = 0 ; i < len - 1 ; i++)     {                int min = i;                for (j = i + 1; j < len; j++)     //走訪未排序的元素                        if (arr[j] < arr[min])    //找到目前最小值                                min = j;    //紀錄最小值                swap(&arr[min], &arr[i]);    //做交換        }}C++实例 template //整數或浮點數皆可使用,若要使用物件(class)時必須設定大於(>)的運算子功能void selection_sort(std::vector& arr) {        for (int i = 0; i < arr.size() - 1; i++) {                int min = i;                for (int j = i + 1; j < arr.size(); j++)                        if (arr[j] < arr[min])                                min = j;                std::swap(arr[i], arr[min]);        }}C#实例 static void selection_sort(T[] arr) where T : System.IComparable{//整數或浮點數皆可使用        int i, j, min, len = arr.Length;        T temp;        for (i = 0; i < len - 1; i++) {                min = i;                for (j = i + 1; j < len; j++)                        if (arr[min].CompareTo(arr[j]) > 0)                                min = j;                temp = arr[min];                arr[min] = arr[i];                arr[i] = temp;        }}Swift实例 import Foundation/// 选择排序////// - Parameter list: 需要排序的数组func selectionSort(_ list: inout [Int]) -> Void {    for j in 0.. list[i] {                minIndex = i            }        }        list.swapAt(j, minIndex)    }}

原文地址:https://github.com/hustcc/JS-Sorting-Algorithm/blob/master/2.selectionSort.md

参考地址:https://zh.wikipedia.org/wiki/%E9%80%89%E6%8B%A9%E6%8E%92%E5%BA%8F

以下是热心网友对选择排序算法的补充,仅供参考:

热心网友提供的补充1:

Kotlin 实现

class SelectionSort { 
    /** 
    * 拓展IntArray为他提供数据两个数交换位置的方法 
    * @param i 第一个数的下标 
    * @param j 第二个数的下标 
    */ 
    fun IntArray.swap(i:Int,j:Int){ 
        var temp=this[i] 
        this[i]=this[j] 
        this[j]=temp 
    } 
    fun selectionSort(array: IntArray):IntArray{
        for (i in array.indices){ 
            //假设最小值是i 
            var min=i 
            var j=i+1 
            while (j in array.indices){ 
                if (array[j]以上为选择排序算法详细介绍,插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等排序算法各有优缺点,用一张图概括: 

关于时间复杂度

平方阶 (O(n2)) 排序 各类简单排序:直接插入、直接选择和冒泡排序。

线性对数阶 (O(nlog2n)) 排序 快速排序、堆排序和归并排序;

O(n1+§)) 排序,§ 是介于 0 和 1 之间的常数。 希尔排序

线性阶 (O(n)) 排序 基数排序,此外还有桶、箱排序。

关于稳定性

稳定的排序算法:冒泡排序、插入排序、归并排序和基数排序。

不是稳定的排序算法:选择排序、快速排序、希尔排序、堆排序。

名词解释:

n:数据规模

k:"桶"的个数

In-place:占用常数内存,不占用额外内存

Out-place:占用额外内存

稳定性:排序后 2 个相等键值的顺序和排序之前它们的顺序相同

文档

直接选择排序

选择排序是一种简单直观的排序算法,无论什么数据进去都是 O(n?) 的时间复杂度。所以用到它的时候,数据规模越小越好。唯一的好处可能就是不占用额外的内存空间。
推荐度:
为你推荐
资讯专栏
热门视频
相关推荐
基数排序流程图 python冒泡排序算法 桶排序c语言 计数排序菜鸟教程 堆排序算法规则 描写兰花的诗句古诗 快速排序算法java 带有动物的古诗 关于踏青的唯美诗句 关于描写燕子的诗句 归并排序算法python思想 希尔排序实现 直接选择排序稳定吗 基数排序算法代码 java冒泡排序代码 桶排序算法java 计数排序c 数据结构堆排序例题 java快速排序简单代码 含有动物的古诗 希尔排序怎么排 简述归并排序算法的基本思路 含有燕子的诗句 踏青的诗词名句 两句关于动物的诗句 快速排序c语言 关于兰花的诗句古诗 堆排序法排序怎么排 计数排序算法c++实现 桶式排序 关于放风筝的古诗 冒泡排序python 基数排序怎么排 选择排序法 希尔排序 归并排序python 描写燕子的古诗绝句 踏青诗句最出名诗句 描写夏天的诗句简单 关于写小动物的诗
Top