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);但其比冒泡排序更快;

浙公网安备 33010602011771号