一、 解决方案
    给定数组:A = [5,3,7,2,1,9,8,4],对数组进行选择排序
    每次循环都找到最小的数,放在前面。
    将数组分为两个子集,排序的和未排序的,每一轮从未排序的子集中选出最小的元素,放入排序子集。重复以上步骤,直到整个数组有序。
    第一轮选择,将最小的元素交换到索引为0的位置;
    第二轮选择,将次小的元素交换到索引为1的位置;
    以此类推……
    二、代码

    1. private static void selection(int[] a){
    2. for (int i = 0; i < a.length - 1; i++) {
    3. int s = i;
    4. for(int j = i+1 ; j<a.length;j++){
    5. if(a[j]<a[s]){
    6. s = j;
    7. }
    8. }
    9. if(s!=i){
    10. swap(a,s,i);
    11. }
    12. }
    13. }

    三、与冒泡排序比较

    1. 一般情况下,选择排序快于冒泡,因为其交换次数少(每趟交换一次);
    2. 如果集合有度高,冒泡更快(如果冒泡索引为0,则停止);
    3. 冒泡属于稳定排序算法,而选择属于不稳定算法。

    除非要排序的内容是一个复杂对象的多个数字属性,且其原本的初始顺序存在意义,那么我们需要在二次排序的基础上保持原有排序的意义,才需要使用到稳定性的算法
    例如:本来是价格高到低,现在要保持价格高到低的顺序下,按销量高到低排序,稳定排序不会打乱。