用户登录
用户注册

分享至

什么是选择排序?

  • 作者: 急躁的年轻人
  • 来源: 51数据库
  • 2022-09-20
导读 选择排序是一种简单直观的排序算法,无论什么数据进去都是 O(n2) 的时间复杂度。所以用到它的时候,数据规模越小越好。
算法步骤

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

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

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

动图演示

代码实现
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="">
Go 代码实现

实例

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.count - 1 {         var minIndex = j
        for i in j..<list.count {             if list[minIndex] > list[i] {                 minIndex = i
            }         }         list.swapAt(j, minIndex)     } }
软件
前端设计
程序设计
Java相关