fbpx
维基百科

选择排序

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

选择排序
選擇排序動畫演示
概况
類別排序算法
資料結構數組
复杂度
平均時間複雜度
最坏时间复杂度
最优时间复杂度
空間複雜度總共,需要輔助空間
最佳解偶尔出现
相关变量的定义
选择排序的示例动画。红色表示当前最小值,黄色表示已排序序列,蓝色表示当前位置

选择排序的主要优点与数据移动有关。如果某个元素位于正确的最终位置上,则它不会被移动。选择排序每次交换一对元素,它们当中至少有一个将被移到其最终位置上,因此对个元素的表进行排序总共进行至多次交换。在所有的完全依靠交换去移动元素的排序方法中,选择排序属于非常好的一种。

實作範例 编辑

C语言 编辑

void selection_sort(int a[], int len)  {  int i,j,temp;  for (i = 0 ; i < len - 1 ; i++)   { int min = i; for (j = i + 1; j < len; j++) //走訪未排序的元素 { if (a[j] < a[min]) //找到目前最小值 { min = j; //紀錄最小值 } } if(min != i) {  temp=a[min]; //交換兩個變數  a[min]=a[i];  a[i]=temp; }  /* swap(&a[min], &a[i]); */ //做交換 } }  /* void swap(int *a,int *b) //交換兩個變數 {  int temp = *a;  *a = *b;  *b = temp; } */ 

Java 编辑

public class SelectionSort { public void sort(int[] arr) { int minIndex; for(int i = 0;i < arr.length;i++) { minIndex = i; //遍历找出未排序中的元素中最小值下标 for(int j = i;j < arr.length;j++) { if(arr[j] < arr[minIndex]) { minIndex = j; } } //若最小值下标与未排序中最左侧下标不一致则交换 if(minIndex != i) { int temp = arr[i]; arr[i] = arr[minIndex]; arr[minIndex] = temp; } } } } 

Julia (程式語言) 编辑

# Julia Sample:SelectionSort function SelectionSort(A) for i=1:length(A) min=i for j=i+1:length(A) min=A[j]<A[min]?j:nothing # Get Min if min!=i   A[min],A[i]=A[i],A[min] # Swap end end end return A end # Main Code A = [16,586,1,31,354,43,3] println(A)  # Original Array println(SelectionSort(A)) # Selection Sort Array 

Python 编辑

longs = len(list1) for i in range(longs-1) :  idx = i  for j in range(i,longs) :  if list1[j] < list1[idx] :  idx = j  if idx != i :  list1[i], list1[idx] = list1[idx], list1[i] 

复杂度分析 编辑

选择排序的交换操作介于  次之间。选择排序的比较操作 次。选择排序的赋值操作介于  次之间。


比较次数 ,比较次数与关键字的初始状态无关,总的比较次数 。交换次数 ,最好情况是,已经有序,交换0次;最坏情况是,逆序,交换 次。交换次数比冒泡排序较少,由于交换所需CPU时间比比较所需的CPU时间多, 值较小时,选择排序比冒泡排序快。

原地操作几乎是选择排序的唯一优点,当空间复杂度要求较高时,可以考虑选择排序;实际适用的场合非常罕见。

外部链接 编辑

选择排序, 此條目没有列出任何参考或来源, 2019年12月16日, 維基百科所有的內容都應該可供查證, 请协助補充可靠来源以改善这篇条目, 无法查证的內容可能會因為異議提出而被移除, 英語, selection, sort, 是一种简单直观的排序算法, 它的工作原理如下, 首先在未排序序列中找到最小, 元素, 存放到排序序列的起始位置, 然后, 再从剩余未排序元素中继续寻找最小, 元素, 然后放到已排序序列的末尾, 以此类推, 直到所有元素均排序完毕, 選擇排序動畫演示概况類別排序算法資料結構數組复杂度平均時間複. 此條目没有列出任何参考或来源 2019年12月16日 維基百科所有的內容都應該可供查證 请协助補充可靠来源以改善这篇条目 无法查证的內容可能會因為異議提出而被移除 选择排序 英語 Selection sort 是一种简单直观的排序算法 它的工作原理如下 首先在未排序序列中找到最小 大 元素 存放到排序序列的起始位置 然后 再从剩余未排序元素中继续寻找最小 大 元素 然后放到已排序序列的末尾 以此类推 直到所有元素均排序完毕 选择排序選擇排序動畫演示概况類別排序算法資料結構數組复杂度平均時間複雜度O n 2 displaystyle O n 2 最坏时间复杂度O n 2 displaystyle O n 2 最优时间复杂度O n 2 displaystyle O n 2 空間複雜度總共O n displaystyle O n 需要輔助空間O 1 displaystyle O 1 最佳解偶尔出现相关变量的定义 选择排序的示例动画 红色表示当前最小值 黄色表示已排序序列 蓝色表示当前位置 选择排序的主要优点与数据移动有关 如果某个元素位于正确的最终位置上 则它不会被移动 选择排序每次交换一对元素 它们当中至少有一个将被移到其最终位置上 因此对n displaystyle n 个元素的表进行排序总共进行至多 n 1 displaystyle n 1 次交换 在所有的完全依靠交换去移动元素的排序方法中 选择排序属于非常好的一种 目录 1 實作範例 1 1 C语言 1 2 Java 1 3 Julia 程式語言 1 4 Python 2 复杂度分析 3 外部链接實作範例 编辑C语言 编辑 void selection sort int a int len int i j temp for i 0 i lt len 1 i int min i for j i 1 j lt len j 走訪未排序的元素 if a j lt a min 找到目前最小值 min j 紀錄最小值 if min i temp a min 交換兩個變數 a min a i a i temp swap amp a min amp a i 做交換 void swap int a int b 交換兩個變數 int temp a a b b temp Java 编辑 public class SelectionSort public void sort int arr int minIndex for int i 0 i lt arr length i minIndex i 遍历找出未排序中的元素中最小值下标 for int j i j lt arr length j if arr j lt arr minIndex minIndex j 若最小值下标与未排序中最左侧下标不一致则交换 if minIndex i int temp arr i arr i arr minIndex arr minIndex temp Julia 程式語言 编辑 Julia Sample SelectionSort function SelectionSort A for i 1 length A min i for j i 1 length A min A j lt A min j nothing Get Min if min i A min A i A i A min Swap end end end return A end Main Code A 16 586 1 31 354 43 3 println A Original Array println SelectionSort A Selection Sort Array Python 编辑 longs len list1 for i in range longs 1 idx i for j in range i longs if list1 j lt list1 idx idx j if idx i list1 i list1 idx list1 idx list1 i 复杂度分析 编辑选择排序的交换操作介于0 displaystyle 0 nbsp 和 n 1 displaystyle n 1 nbsp 次之间 选择排序的比较操作为n n 1 2 displaystyle n n 1 2 nbsp 次 选择排序的赋值操作介于0 displaystyle 0 nbsp 和3 n 1 displaystyle 3 n 1 nbsp 次之间 比较次数O n 2 displaystyle O n 2 nbsp 比较次数与关键字的初始状态无关 总的比较次数N n 1 n 2 1 n n 1 2 displaystyle N n 1 n 2 1 n times n 1 2 nbsp 交换次数O n displaystyle O n nbsp 最好情况是 已经有序 交换0次 最坏情况是 逆序 交换n 1 displaystyle n 1 nbsp 次 交换次数比冒泡排序较少 由于交换所需CPU时间比比较所需的CPU时间多 n displaystyle n nbsp 值较小时 选择排序比冒泡排序快 原地操作几乎是选择排序的唯一优点 当空间复杂度要求较高时 可以考虑选择排序 实际适用的场合非常罕见 外部链接 编辑 nbsp 維基教科書中的相關電子教程 算法实现 排序 选择排序 取自 https zh wikipedia org w index php title 选择排序 amp oldid 80415293, 维基百科,wiki,书籍,书籍,图书馆,

文章

,阅读,下载,免费,免费下载,mp3,视频,mp4,3gp, jpg,jpeg,gif,png,图片,音乐,歌曲,电影,书籍,游戏,游戏。