经典排序之选择排序

Posted 奔跑在梦想的道路上

tags:

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

选择排序(SelectionSort)的算法思想:对于n个待排序的数组,进行n-1次排序,每次选出待排序数据集中的最小数(或最大数),然后将选出的最小数(或最大数)与当前待排序数据集的首个数交换;以此类推,直到排序结束,整个待排序数组也成为有序数组。

 之所以称为选择排序,意为每次选出最小或最大的数,从而完成排序。

我接下来通过 代码演示:

/**
 * 选择排序
 * @author 李章勇
 */
import java.util.Arrays;
public class Demo1 {
static int num=0;
static void selectSort(int[] arr){
for(int i=0;i<arr.length-1;i++){
int k=i;//把数组最左侧的角标赋给k
for(int j=k+1;j<arr.length;j++){
if(arr[j]<arr[k]){//升序排列,如果发现有比arr[k]小的元素,则存下该元素所在的角标
k=j;
}
}
if(i!=k){//如果存在比arr[i]更小的元素,则将该元素与arr[i]交换位置,依次类推,完成数组升序排列
int temp=arr[i];
arr[i]=arr[k];
arr[k]=temp;
System.out.println("第 "+(++num)+" 次:"+Arrays.toString(arr));
}
}
}
public static void main(String[] args) {
int[] arr={15,23,8,4,6,9,19};
System.out.println("排序前:"+Arrays.toString(arr));
selectSort(arr);
System.out.println("排序后:"+Arrays.toString(arr));
}
}

上述代码运行后的结果:  

排序前:[15, 23, 8, 4, 6, 9, 19]
第 1 次:[4, 23, 8, 15, 6, 9, 19]
第 2 次:[4, 6, 8, 15, 23, 9, 19]
第 3 次:[4, 6, 8, 9, 23, 15, 19]
第 4 次:[4, 6, 8, 9, 15, 23, 19]
第 5 次:[4, 6, 8, 9, 15, 19, 23]
排序后:[4, 6, 8, 9, 15, 19, 23]

最后,选择排序的平均时间复杂度为O(n2),在稳定性方面是不稳定的。

【注:关于排序中的稳定性,请参考本博中的“经典排序之插入排序”文章】

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

经典算法之选择排序

经典排序算法和Python详解之选择排序和二元选择排序

Scratch十大经典排序算法之选择排序

十大经典排序算法之选择排序

十大经典排序之冒泡,选择,插入排序

经典(java版)排序算法的分析及实现之三简单选择排序