01_排序_选择排序

【基本原理】

对于给定的一组数据,经过第一轮比较后得到最小的数据,然后将该数据与第一个数据的位置进行交换;

然后对不包括第一个数据以外的其它数据进行第二轮比较,得到最小的数据并与第二个数据进行位置交换;

重复该过程,直到进行比较的数据只有一个时为止。

 

【举例】

待排序数组

【38,65,97,76,13,27,49】

排序过程

第一趟:【13,65,97,76,38,27,49】

第二趟:【13,27,97,76,38,65,49】

第三趟:【13,27,38,76,97,65,49】

第四趟:【13,27,38,49,97,65,76】

第五趟:【13,27,38,49,65,97,76】

第六趟:【13,27,38,49,65,76,97】

最后结果:【13,27,38,49,65,76,97

 

【代码实现】

package com.sort;

public class TestSelectSort {
    public static int[] selectSort(int[] a){
        
        int length=a.length; //先得到数组的长度
        int i,j,n,tmp,flag;
        for(i=0;i<length;i++){
            tmp=a[i];  //tmp为每次循环的第一个位置
            flag=i;
            for(j=i+1;j<length;j++){
                if(tmp>a[j]){
                    tmp=a[j]; //这一步不要忘记了,因为tmp不一定是最小的,必须用用循环过的最小的和当前的数据比较
                    flag=j;   //如果发现比tmp小的数据,将flag标记为当前位置,循环结束,flag标志的是最小数字的下标
                }
            }
            if(flag!=i){    //如果flag已经不再是刚开始第一个位置的i,那么将两者的数据调换位置
                n=a[i];
                a[i]=a[flag];
                a[flag]=n;
            }
        }
        return a;
    }
    public static void main(String[] args){
        int a[]={2,9,0,8,7,1,5,4,3,6};
        a=selectSort(a);
        for(int i=0;i<a.length;i++){
            System.out.print(a[i]+" ");
        }
    }
}

 

posted @ 2016-07-24 23:55  HigginCui  阅读(396)  评论(0编辑  收藏  举报