选择排序(Selection Sort)

Posted Code观天下

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了选择排序(Selection Sort)相关的知识,希望对你有一定的参考价值。

选择排序(Selection-sort)是一种简单直观的排序算法。它的工作原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。

2.1 算法描述

n个记录的直接选择排序可经过n-1趟直接选择排序得到有序结果。具体算法描述如下:

  • 初始状态:无序区为R[1..n],有序区为空;

  • 第i趟排序(i=1,2,3…n-1)开始时,当前有序区和无序区分别为R[1..i-1]和R(i..n)。该趟排序从当前无序区中-选出关键字最小的记录 R[k],将它与无序区的第1个记录R交换,使R[1..i]和R[i+1..n)分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区;

  • n-1趟结束,数组有序化了。

2.2 动图演示


2.3 代码实现

C++版:

include <iostream>

#include <algorithm>


using namespace std;


void selectionSort(int arr[], int n){


    for(int i = 0 ; i < n ; i ++){

        // 寻找[i, n)区间里的最小值

        int minIndex = i;

        for( int j = i + 1 ; j < n ; j ++ )

            if( arr[j] < arr[minIndex] )

                minIndex = j;


        swap( arr[i] , arr[minIndex] );

    }


}


int main() {


    int a[10] = {10,9,8,7,6,5,4,3,2,1};

    selectionSort(a,10);

    for( int i = 0 ; i < 10 ; i ++ )

        cout<<a[i]<<" ";

    cout<<endl;


    return 0;

}


java版:

public class SelectionSort {


    private SelectionSort(){}


    public static void sort(int[] arr){


        int n = arr.length;

        for( int i = 0 ; i < n ; i ++ ){

            // 寻找[i, n)区间里的最小值的索引

            int minIndex = i;

            for( int j = i + 1 ; j < n ; j ++ )

                if( arr[j] < arr[minIndex] )

                    minIndex = j;


            swap( arr , i , minIndex);

        }

    }


    private static void swap(int[] arr, int i, int j) {

        int t = arr[i];

        arr[i] = arr[j];

        arr[j] = t;

    }


    public static void main(String[] args) {


        int[] arr = {10,9,8,7,6,5,4,3,2,1};

        SelectionSort.sort(arr);

        for( int i = 0 ; i < arr.length ; i ++ ){

            System.out.print(arr[i]);

            System.out.print(' ');

        }

        System.out.println();

    }

}


python版:

def selectionSort(alist):

    for i in range(len(alist)):

        minposition=i

        for j in range(i,len(alist)):

            if alist[minposition]>alist[j]:

                minposition=j

        alist[i],alist[minposition]=alist[minposition],alist[i]

    return alist


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;

}



以上是关于选择排序(Selection Sort)的主要内容,如果未能解决你的问题,请参考以下文章

选择排序—简单选择排序(Simple Selection Sort)

排序--选择排序Selection Sort Java实现

选择排序(Selection Sort)

选择排序(selection_sort)——Python实现

选择排序(Selection sort)

排序算法-选择排序(Selection Sort)