2------选择排序

选择排序是对冒泡排序的改进,将数据交换次数有O(N^2)变为O(N),而比较次数仍为O(N^2);

   主要思想步骤:

            (1):假定第一个数为最小数,并记录它的下标作为最小数据的下标(min),然后拿这个数的下标和其后面的数据作比较(根据下标对应的值做比较),如果后面的数据都比这个第一个数据大,则不 

                       做交换,第一个数为第一趟排序的结果。然后从第  二 个数开始重复第一个数的做法;

            (2): 在(1)中,如果后面的数比第一个数小,则将最min值设为较小数的小标,继续向后寻找,直到本次循环结束,找到最小数的下标;然后进行交换位置(和最左边的第一个数据交换位置);

            (3);重复(1)(2),,,,

             总结: 做了很多趟比较,但是每趟只交换一次数据(减小数据再内存中的变动);

主要代码如下:

public void selectSort(){
        int out,in,min;
        for(out=0;out<nElems-1;out++){
            min=out;
            for(in=out+1;in<nElems;in++){
                if(a[in]<a[min]){
                    min=in;
                }
                swap(out,min);
            }
        }
    }
    private void swap(int one ,int two){
         long temp=a[one];
         a[one]=a[two];
         a[two]=temp;
    }

   时间复杂度:和冒泡排序一样做了同样多次的比较,所以时间复杂度为O(n^2);但其比冒泡排序更快;

 

posted @ 2016-09-29 22:54  一天到晚游泳的fish  阅读(125)  评论(0)    收藏  举报